第六节:使用 Docker Compose 实现多服务的联动编排实战

1 阅读3分钟

在 Docker 的项目实战中,当应用从单一容器扩展到包含 Web 服务、数据库、缓存等多个组件时,手动管理每个容器的启动顺序和网络连接将变得异常繁琐。Docker Compose 正是为此设计的工具,它允许开发者通过一个 YAML 配置文件来定义和运行多容器应用。


一、 核心概念:什么是 Docker Compose?

Docker Compose 是 Docker 官方提供的容器编排工具。

  • 配置即服务:使用 YAML 文件(通常命名为 docker-compose.yml)来配置应用程序的服务。

  • 一键启动:只需一个简单的命令 docker-compose up,即可创建并启动所有在配置中定义的服务。

  • 独立环境:它可以为项目创建相互隔离的运行环境,确保不同项目间的容器、网络和卷互不干扰。


二、 Docker Compose 的核心组成部分

一个标准的 Compose 文件通常包含以下三个关键要素:

  1. Services(服务) :定义应用中的各个组件。每个服务都指定了所使用的镜像、端口映射、环境变量等参数,类似于执行 docker run 时的配置。

  2. Networks(网络) :定义容器间通信的通道。Compose 会默认为项目创建一个网络,使各服务可以通过服务名直接通信。

  3. Volumes(卷) :定义持久化存储。用于在容器重启或销毁后保留重要数据(如数据库文件)。


三、 实战:编排多服务应用(以 VS Code 为例)

在 VS Code 中,结合 Docker 插件,你可以高效地完成编排工作:

1. 编写配置文件

在项目根目录创建 docker-compose.yml。假设我们需要编排一个 Web 服务和它的数据库:

YAML

[cite_start]version: '3.8' # 指定 Compose 文件的版本 
services:
  web:
    build: . # 使用当前目录下的 Dockerfile 构建镜像 [cite: 69]
    ports:
      - [cite_start]"80:80" # 映射宿主机 80 端口到容器 80 端口 [cite: 52]
    depends_on:
      - db # 确保 db 服务先启动
  db:
    [cite_start]image: mysql:5.7 # 使用官方 MySQL 镜像 [cite: 52]
    environment:
      [cite_start]MYSQL_ROOT_PASSWORD: password # 设置环境变量 [cite: 50]
    volumes:
      - [cite_start]db-data:/var/lib/mysql # 具名卷持久化数据 [cite: 52]

volumes:
  [cite_start]db-data: # 声明卷 [cite: 53]

2. 核心命令手册

通过终端或 VS Code 侧边栏可以执行以下关键指令:

  • 启动服务docker-compose up -d-d 表示在后台运行。

  • 查看状态docker-compose ps。查看当前编排项目中服务的运行情况。

  • 查看日志docker-compose logs -f。持续查看所有服务的聚合日志。

  • 停止并清理docker-compose down。停止容器并移除相关的网络。

  • 手动扩容docker-compose scale web=3。快速将 Web 服务的副本数调整为 3 个。


四、 进阶:自动化部署流程

在 VS Code 中,你可以利用图形化界面进一步简化流程:

  • 右键运行:在 docker-compose.yml 文件上点击右键,直接选择 "Compose Up",VS Code 会自动在集成终端执行启动指令。

  • 容器监控:在 Docker 视图中,Compose 启动的服务会被自动归类在一个“项目组”下,方便你一键启停或批量删除。

  • 快速调试:可以直接在 VS Code 面板中点击容器,选择 "View Logs" 或是 "Attach Shell" 进入内部调试。