在前端开发过程中,我们常常需要使用数据库存储数据,MySQL 是一个常用的关系型数据库管理系统,但是在开发和测试环境中搭建 MySQL 数据库并不是一件简单的事情,需要考虑多个方面,比如数据库版本、数据的备份和恢复、多个环境的同步等等。
Docker Compose 是一个方便管理 Docker 应用的工具,可以通过编写一个 docker-compose.yml 文件来定义和运行多个容器的应用。在本文中,我们会使用 Docker Compose 来创建多个容器来共享同一个 MySQL 数据库,以便在多个环境中进行开发和测试。
前置条件
在进行本文的操作之前,需要满足以下条件:
- 电脑安装了 Docker 和 Docker Compose。
- 了解 Docker 的基本使用方法,如拉取镜像、运行容器等。
编写 docker-compose.yml 文件
在本文中,我们会使用两个容器来共享一个 MySQL 数据库,一个容器运行 MySQL 服务器,另一个容器运行 PHP 应用程序。我们需要在两个容器之间建立网络连接,使得 PHP 应用程序可以连接到 MySQL 数据库。
我们首先创建一个文件夹(比如 docker-mysql
),在此文件夹下创建一个 docker-compose.yml
文件,用于定义我们的容器。
在 docker-compose.yml
文件中,我们首先定义一个 services
对象,里面包含 MySQL 和 PHP 两个服务:
-- -------------------- ---- ------- -------- ----- --------- --- ------ --------- -------- - ---------------------- -------- ------ ------------ -------------------- ------- --------------- ---- ----------- ---- --------------- ---- ---- ------ - -------- - ------------------- ------ - --------- ----------- - -- -------- --------
上面的代码中,我们使用了 MySQL 5.7 的镜像作为我们的数据库服务器。我们还定义了一个名为 db_data
的 Docker 卷,用于存储 MySQL 数据库的数据。
在 db
服务中,我们通过 volumes
将 MySQL 数据库数据存储到 db_data
卷中,使得我们可以在容器之间共享同样的数据。
为了方便起见,在 db
服务中我们还定义了一些环境变量,包括 MySQL 的 root 用户密码,数据库名和用户名,以及密码。这些环境变量会在运行容器时被传递给 MySQL 服务器。
在 php
服务中,我们使用了 build
命令来构建 PHP 应用程序,我们将 PHP 代码存储在一个名为 ./app
的文件夹中,通过 volumes
将该文件夹挂载到容器中的 /var/www/html
目录下。
我们还指定了容器映射到主机的端口号 8000
,以及 depends_on
参数,指定 php
服务依赖于 db
服务,这样 php
服务会等待 db
服务启动完成后才启动。
编写 PHP 应用程序
我们现在创建一个简单的 PHP 应用程序,用于连接 MySQL 数据库,创建一张数据表,并插入一些样例数据。
在 ./app
文件夹下创建一个 index.php
文件,写入以下内容:
-- -------------------- ---- ------- ----- ----------- - ----- --------- - ------- --------- - ------- ------- - ------- -- ------ ---------- ----- - --- ------------------- ---------- ---------- --------- -- ----- ---------- -- ---------------------- - --------------- ------- - - ---------------------- - -- ------ ----- ---- - ------- ----- -- --- ------ ----- - -- ------ -------- -------------- ------- ---- --------- ----------- --- ----- -------- ----------- --- ----- ----- ----------- --- ---- --- -- ------------------- --- ----- - ---- ------ ----- ------- -------------- - ---- - ---- ------ -------- ------ - - ------------- - -- ------ ---- ---- - ------- ---- ----- ----------- --------- ------ ------ -------- ------ -------------------- -------- ------ --------------------- -- ------------------- --- ----- - ---- ---- ------- ------- -------------- - ---- - ---- ------- - - ---- - ------ - ------------- - --------------- --
在上面的代码中,我们先定义了一些变量,包括 MySQL 数据库的主机名、用户名、密码和数据库名。
然后,我们创建了一个 MySQL 连接对象 $conn
,如果连接失败,则输出错误信息。接着使用 SQL 语句创建一张名为 users
的数据表,如果成功则输出信息,否则输出错误信息。最后使用 SQL 语句插入一些样例数据。
运行容器
我们已经完成了 docker-compose.yml
文件和 PHP 应用程序的编写,现在我们可以启动容器并测试运行情况了。
在 docker-mysql
文件夹下打开终端,输入以下命令启动容器:
docker-compose up -d
这条命令会后台运行我们的容器。
接着打开浏览器,在地址栏中输入 http://localhost:8000
,回车后将看到一个页面显示“Table users created successfullyNew records created successfully”,这意味着我们的容器成功运行,并且数据表和数据成功创建了。
现在我们可以在 MySQL 客户端中连接到 MySQL 数据库中,检查是否存在相应的数据表和数据。我们可以使用以下命令来连接到容器中的 MySQL:
docker-compose exec db mysql -ptest test
在 MySQL 客户端中输入以下命令可以查看数据表 users
:
SHOW TABLES;
在 MySQL 客户端中输入以下命令可以查看数据表 users
中的数据:
SELECT * FROM users;
如果成功输出了样例数据,则说明我们的 MySQL 容器和 PHP 容器已经成功共享了一个 MySQL 数据库。
总结
在本文中,我们使用 Docker Compose 来创建了多个容器,其中一个容器运行 MySQL 数据库,另一个容器运行 PHP 应用程序,实现了多个容器共享同一 MySQL 数据库的目的。
使用 Docker Compose 管理容器化应用程序非常方便,可以轻松地构建、运行和管理多个容器,以及连接和共享数据。希望通过本文的介绍,读者可以从中学到使用 Docker Compose 构建容器化应用程序的方法,进一步了解 Docker 容器化技术的优势和使用方法。
示例代码可以在 GitHub 仓库 中找到。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c4bd5968c7c53b0b4d825