Docker Compose:使用多个容器共享 MySQL 数据库

阅读时长 7 分钟读完

在前端开发过程中,我们常常需要使用数据库存储数据,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 文件夹下打开终端,输入以下命令启动容器:

这条命令会后台运行我们的容器。

接着打开浏览器,在地址栏中输入 http://localhost:8000,回车后将看到一个页面显示“Table users created successfullyNew records created successfully”,这意味着我们的容器成功运行,并且数据表和数据成功创建了。

现在我们可以在 MySQL 客户端中连接到 MySQL 数据库中,检查是否存在相应的数据表和数据。我们可以使用以下命令来连接到容器中的 MySQL:

在 MySQL 客户端中输入以下命令可以查看数据表 users

在 MySQL 客户端中输入以下命令可以查看数据表 users 中的数据:

如果成功输出了样例数据,则说明我们的 MySQL 容器和 PHP 容器已经成功共享了一个 MySQL 数据库。

总结

在本文中,我们使用 Docker Compose 来创建了多个容器,其中一个容器运行 MySQL 数据库,另一个容器运行 PHP 应用程序,实现了多个容器共享同一 MySQL 数据库的目的。

使用 Docker Compose 管理容器化应用程序非常方便,可以轻松地构建、运行和管理多个容器,以及连接和共享数据。希望通过本文的介绍,读者可以从中学到使用 Docker Compose 构建容器化应用程序的方法,进一步了解 Docker 容器化技术的优势和使用方法。

示例代码可以在 GitHub 仓库 中找到。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c4bd5968c7c53b0b4d825

纠错
反馈