Docker Compose 指定已存在的 Networks

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。在构建复杂的微服务架构时,使用 Docker Compose 可以大大简化容器之间的网络配置。本文将深入探讨如何在 Docker Compose 文件中指定已经存在的网络,并配合代码示例和可视化工具,使您更好地理解这一过程。

什么是 Docker 网络?

在 Docker 中,网络是允许容器之间和外部进行通信的基础。不同的网络模式(如 bridge、host 和 overlay)各自适用于不同的场景。通过 Docker Compose,您可以轻松地管理多个服务及其网络配置。最重要的是,您可以指定已经存在的网络,以便容器能够加入到您事先创建的网络中。

创建一个网络

在开始之前,您可能需要一个既有的 Docker 网络。在终端中运行以下命令来创建一个网络:

docker network create my_network
  • 1.

这个命令将创建一个名称为 my_network 的 Docker 网络。接下来,我们将使用这个网络。

Docker Compose 文件示例

Docker Compose 文件(通常命名为 docker-compose.yml)用于定义和运行应用程序的服务。在这个例子中,我们将为一个简单的 Node.js 应用和一个 MongoDB 数据库配置 Docker Compose。目的在于将这两个服务连接在同一个已存在的网络 my_network 上。

以下是 docker-compose.yml 的代码示例:

version: '3.8'

services:
  web:
    image: node:14
    container_name: my_node_app
    networks:
      - my_network
    volumes:
      - .:/usr/src/app
    command: ["npm", "start"]

  mongo:
    image: mongo:4.4
    container_name: my_mongo_db
    networks:
      - my_network
    volumes:
      - mongo_data:/data/db

networks:
  my_network:
    external: true

volumes:
  mongo_data:
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
代码解析
  1. services: 定义了两个服务 webmongo
  2. image: 指定了所使用的基础镜像。
  3. container_name: 明确命名每个容器。
  4. networks: 使用 - my_network 让这两个服务加入到已存在的网络中。
  5. external: 将网络设置为外部,这表示我们使用的是一个已经创建好的网络。
  6. volumes: 为 MongoDB 数据指定了一个数据卷,以便数据可以持久化。

启动应用程序

使用以下命令启动应用程序:

docker-compose up
  • 1.

该命令将会拉取必要的镜像,创建并启动容器。同时容器将会根据 Compose 文件中的网络配置加入 my_network

旅行图

接下来,我们用 Mermaid 语法来描绘一个旅行图,展示使用 Docker Compose 的步骤。

Docker Compose 使用步骤 你的任务
创建网络
创建网络
你的任务
创建 Docker 网络
创建 Docker 网络
编写 Compose 文件
编写 Compose 文件
你的任务
定义多个服务
定义多个服务
你的任务
指定网络
指定网络
启动容器
启动容器
你的任务
运行 `docker-compose up`
运行 `docker-compose up`
Docker Compose 使用步骤
旅行图分析

这个图表显示了从创建网络、编写 Compose 文件到启动容器的整个过程。每个步骤的重要性都得到了体现,帮助您理清如何高效地使用 Docker Compose。

服务间的交互

现在让我们通过一个序列图,来描述 web (Node.js)服务是如何与 mongo (MongoDB)服务进行交互的。

MongoDB Node.js App MongoDB Node.js App 连接请求 确认连接 数据查询 返回数据
序列图分析

该序列图说明了 Node.js 应用如何通过 MongoDB 进行数据存取。首先 Node.js 应用尝试连接到 MongoDB,随后进行数据查询,并最终接收到返回数据。

结论

通过本文,我们深入探讨了如何在 Docker Compose 中指定已存在的网络,以及如何管理服务之间的连接。您可以根据这些基本知识创建自己的多容器 Docker 应用程序。记得在每次更新 Compose 文件后,使用 docker-compose up 来启动或更新服务。

无论是开发一个全新的应用,还是管理已有项目,理解 Docker Compose 的网络机制是至关重要的。它不仅能帮助您更好地构建微服务架构,同时也能在团队合作中减少网络配置的问题。希望这篇文章对您有所帮助,让您在 Docker Compose 的世界中游刃有余。