本文将介绍如何使用 Docker 创建多 docker-compose 互通网络服务。我们将会讨论如何创建一个公共的 Mysql 数据库,然后再创建一个服务来连接我们的公用本地 Mysql 数据库。同时,我们还会解决如何处理那些在 docker-compose 上将数据库一起写的服务,以及如何在 docker-compose 上运行能共用数据的服务。

简介

Docker Compose 是一个用于定义和运行多个容器应用程序的工具。使用 Docker Compose 可以轻松地运行多个容器,并可以创建一个公共网络来让这些容器之间互相通信。在这篇文章中,我们将会使用 Docker Compose 来创建一个公共网络,并将我们的服务加入到这个网络中,以便它们之间可以互相通信。

image-20230323150710229

创建公共网络 mysql

我们首先需要创建一个公共的网络 mysql。我们可以使用以下命令来创建一个名为 mysql 的网络:

docker network create mysql

创建完成后,我们可以使用以下命令来查看创建的网络:

docker network ls

image-20230323150750595

docker-compose 运行公共 mysql 服务

现在我们已经创建了一个名为 mysql 的公共网络,接下来我们将使用 docker-compose 来运行一个 Mysql 服务,并将它添加到这个网络中。

在你的项目文件夹下,创建一个名为 docker-compose.yml 的文件,并将以下代码添加到文件中:

version: "3.8"

services:
  mysql8:
    container_name: mysql8
    image: mysql:8
    #restart: always 本地运行就不需要自启了
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: chengzz
    hostname: mysql8
    volumes:
      - "~/Docker/mysql8/data:/var/lib/mysql"
      - "~/Docker/mysql8/my.cnf:/etc/mysql/conf.d/my.cnf"
    networks:
      - mysql

networks:
  mysql:
    external: true
# 自己手动创建公共网络mysql
# docker network create mysql

该代码指定了我们要创建的服务为 mysql8,它使用最新的 Mysql8 镜像,并设置了 Mysql 的 root 密码。我们还将服务添加到了名为 mysql 的公共网络中。

接下来,我们可以使用以下命令来启动服务:

docker-compose up -d

docker-compose 运行我们的服务如 wordpress

现在我们已经创建了一个公共的 Mysql 服务,并将它添加到了 mysql 网络中,我们可以使用 docker-compose 来运行我们的服务,例如 WordPress。

在你的项目文件夹下,创建一个名为 docker-compose.yml 的文件,并将以下代码添加到文件中:

version: "3.8"

services:
  wordpress:
    container_name: chengzz
    image: wordpress:latest
    ports:
      - "80:80"
    volumes:
      - ~/Docker/wordpress/html:/var/www/html
    environment:
      WORDPRESS_DB_HOST: mysql8:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: chengzz
      WORDPRESS_DB_NAME: chengzz
    # 连接mysql网络
    networks:
      - mysql

networks:
  mysql:
    external: true

其中,我们指定了 wordpress 服务所使用的镜像为 wordpress,同时将其暴露在 80 端口,并指定其依赖于 db 服务,这样我们才能保证在 wordpress 服务启动前 db 服务已经启动。

然后我们在 db 服务中添加了 WORDPRESS_DB_HOST、WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD 和 WORDPRESS_DB_NAME 等环境变量,以及将数据映射到容器中的/var/www/html 目录,用于持久化 wordpress 的数据。同时,我们也将服务 加入到了 mysql 网络中

最后,在文件的末尾,我们定义了 mysql 网络,并指定它的外部名称为 mysql,这样我们的服务才能正确地连接到该网络。

完成后,我们可以使用以下命令在后台启动 wordpress 服务:

docker-compose up -d

启动后,我们可以在浏览器中访问 http://localhost:80 来访问 wordpress 站点,它已经连接到了公共 mysql 服务。

这样,我们就成功地创建了一个公共网络 mysql,并将我们的服务,如 wordpress,连接到该网络中,实现了多 docker-compose 互通网络服务。

image-20230323150910755

总结

在本文中,我们介绍了如何使用 Docker 创建多 docker-compose 互通网络服务。首先,我们创建了一个公共网络 mysql,然后在该网络上启动了一个 mysql 服务。最后,我们将我们的服务,如 wordpress,连接到该网络上,以便可以使用公共 mysql 服务。

使用 Docker 创建多 docker-compose 互通网络服务可以帮助我们更好地管理我们的应用程序,同时也可以减少应用程序之间的耦合性,提高应用程序的可移植性和可伸缩性。希望本文可以对你有所帮助。