在 Docker 的项目实战中,当应用从单一容器扩展到包含 Web 服务、数据库、缓存等多个组件时,手动管理每个容器的启动顺序和网络连接将变得异常繁琐。Docker Compose 正是为此设计的工具,它允许开发者通过一个 YAML 配置文件来定义和运行多容器应用。
一、 核心概念:什么是 Docker Compose?
Docker Compose 是 Docker 官方提供的容器编排工具。
-
配置即服务:使用 YAML 文件(通常命名为
docker-compose.yml)来配置应用程序的服务。 -
一键启动:只需一个简单的命令
docker-compose up,即可创建并启动所有在配置中定义的服务。 -
独立环境:它可以为项目创建相互隔离的运行环境,确保不同项目间的容器、网络和卷互不干扰。
二、 Docker Compose 的核心组成部分
一个标准的 Compose 文件通常包含以下三个关键要素:
-
Services(服务) :定义应用中的各个组件。每个服务都指定了所使用的镜像、端口映射、环境变量等参数,类似于执行
docker run时的配置。 -
Networks(网络) :定义容器间通信的通道。Compose 会默认为项目创建一个网络,使各服务可以通过服务名直接通信。
-
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" 进入内部调试。