Docker 是一种流行的虚拟化技术,可以让开发人员将应用程序打包成容器,并在不同的环境中运行。在这种情况下,我们将学习如何在 Docker 容器中安装 MySQL 数据库,以及如何使用 Docker Compose 将这个容器与其他容器连接起来。
步骤 1:创建一个 Docker 容器
首先,我们需要创建一个 Docker 容器并运行它。在这个容器中,我们将安装 MySQL 数据库。我们可以使用以下命令在终端中创建一个容器:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
运行上面的命令后,Docker 会从 Docker Hub 中自动下载 MySQL 镜像,并在本地创建一个容器。这个容器的名称是 mysql-container
,MySQL 的根用户密码是 my-secret-pw
。
步骤 2:登录到 MySQL 容器
容器已经创建并运行,现在我们需要登录到这个容器中。可以使用以下命令登录:
docker exec -it mysql-container mysql -uroot -p
这个命令将打开 MySQL 数据库,并使用根用户身份进行身份验证。
步骤 3:创建一个数据库
现在,我们已经登录到 MySQL 数据库中,我们需要创建一个新的数据库。可以使用以下命令创建新数据库:
CREATE DATABASE mydb;
请注意,这个命令将创建一个名为 mydb
的新数据库。你可以将其替换为你想要创建的任何其他数据库名称。
步骤 4:退出 MySQL 容器
我们已经完成了在 MySQL 容器中安装和设置数据库的所有步骤。现在,我们需要退出 MySQL 容器并返回到主机终端。可以使用以下命令退出 MySQL 容器:
exit
步骤 5:连接到 MySQL 容器
现在我们已经退出了 MySQL 容器,我们需要连接到它,以便在本地计算机上执行操作。可以使用以下命令连接到 MySQL 容器:
docker run -it --link mysql-container:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
该命令将启动一个新 Docker 容器,并将其连接到先前创建的 MySQL 容器。如果一切正常,你应该看到一个新的 MySQL 提示符。
步骤 6:使用 Docker Compose 运行多个容器
现在我们已经成功地在 Docker 容器中安装了 MySQL 数据库,我们可以使用 Docker Compose 在同一个网络中运行多个容器。在这种情况下,我们将使用一个简单的 Docker Compose 文件,该文件将定义两个服务:MySQL 服务和相关的 Web 应用程序服务。
以下是一个示例的 Docker Compose 文件:
-- -------------------- ---- ------- -------- --- --------- --- ------ ----- -------- ------ ------------ -------------------- ------------ ---- ------ - ------ - ----------- ------------ ------------- --------------------------------- ----------- - --
这个 Docker Compose 文件将定义两个服务:
db
服务使用 MySQL 镜像,并设置根用户密码为my-secret-pw
。web
服务构建当前目录中的 Dockerfile 文件,并将应用程序运行在端口号5000
上。应用程序的数据库 URI 是mysql://root:my-secret-pw@db/mydb
。
要运行这个 Docker Compose 文件,可以使用以下命令:
docker-compose up
这个命令将启动两个服务:db
服务和 web
服务。web
服务将连接到 db
服务,并使用先前创建的数据库进行数据交互。
结论
在本文中,我们了解了如何在 Docker 容器中安装 MySQL 数据库。我们还学习了如何使用 Docker Compose 在同一个网络中运行多个容器。这些知识可以帮助你更好地构建容器化的 Web 应用程序,并使其更便于在不同的环境中部署和运行。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6774d3186d66e0f9aaf0c0eb