Docker Compose

Docker Compose

Docker Compose是什么

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 格式的配置文件(docker-compose.yml),您可以统一管理多个容器的配置(如服务依赖、网络、存储卷等),并通过简单命令一键启动或停止整个应用栈。

核心功能:

  • 单文件配置:用 YAML 文件定义所有服务、网络、卷。

  • 一键启停:通过一条命令启动或销毁整个应用环境。

  • 服务依赖管理:自动处理容器启动顺序(如先启动数据库再启动 Web 服务)。

  • 环境隔离:支持开发、测试、生产环境的不同配置。

注意

由于 Docker 官方已将 Compose 集成到 CLI 中,推荐使用 docker compose 替代旧的 docker-compose


Docker Compose 配置文件

基础结构示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3.9"  # 指定 Compose 版本(需与 Docker 引擎兼容)

services: # 定义所有服务容器
web: # 服务名称(自定义)
image: nginx:latest # 使用的镜像vim
ports:
- "80:80" # 端口映射(宿主机:容器)
volumes:
- ./html:/usr/share/nginx/html # 挂载宿主机目录到容器
depends_on: # 依赖的服务
- db

db: # 第二个服务(数据库)
image: mysql:8.0
environment: # 环境变量
MYSQL_ROOT_PASSWORD: example
volumes:
- mysql_data:/var/lib/mysql # 使用命名卷持久化数据

volumes: # 定义命名卷
mysql_data:

关键配置项说明

配置项说明
version指定 Compose 文件格式版本(常用 3.x)。
services定义所有需要运行的容器服务,每个服务需配置镜像、端口、卷等。
image指定容器使用的镜像(如 nginx:latest)。
ports映射宿主机端口到容器端口(格式:"宿主机端口:容器端口")。
volumes挂载宿主机目录或命名卷到容器路径(如 ./data:/app/data)。
environment设置容器内的环境变量(支持键值对或列表)。
depends_on定义服务启动顺序(例如 Web 服务依赖数据库服务先启动)。
networks自定义容器网络(默认所有服务加入同一网络,可通过服务名互相通信)。

常用命令

1. 启动服务

1
2
3
4
5
6
7
8
# 前台启动(调试用,Ctrl+C 停止)
docker-compose up

# 后台启动(-d 表示 detached 模式)
docker-compose up -d

# 启动时强制重新构建镜像(如果 Dockerfile 有更新)
docker-compose up -d --build

2. 停止并清理

1
2
3
4
5
# 停止并删除容器、网络(保留卷和数据)
docker-compose down

# 彻底清理(删除容器、网络、镜像、未使用的卷)
docker-compose down --rmi all --volumes

重启

1
docker compose restart

3. 查看服务状态

1
2
3
4
5
# 查看运行中的服务
docker-compose ps

# 查看服务日志(-f 持续跟踪日志)
docker-compose logs -f web

4. 管理单个服务

1
2
3
4
5
6
7
# 启动/停止/重启指定服务
docker-compose start web
docker-compose stop web
docker-compose restart web

# 进入容器执行命令(例如启动 Bash)
docker-compose exec web bash

5. 扩展服务实例

1
2
# 启动多个 Web 服务实例(需服务支持水平扩展)
docker-compose up -d --scale web=3

高级技巧

1. 多环境配置

  • 使用多个 Compose 文件(如 docker-compose.prod.yml)覆盖默认配置:
    1
    docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

2. 变量替换

在 Compose 文件中使用环境变量:

1
2
3
services:
web:
image: nginx:${NGINX_VERSION:-latest} # 默认使用 latest,可覆盖

3. 健康检查

定义服务健康检查策略:

1
2
3
4
5
6
7
8
services:
db:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 3

Note

更新容器

  • 修改 docker-compose.yml 后,运行:
    1
    docker-compose up -d --build

数据持久化失败?

  • 确保使用命名卷(如 mysql_data:/var/lib/mysql)或正确挂载宿主机路径。

服务间通信问题?

  • 使用服务名(如 db)代替 IP 地址,Compose 会自动解析服务名到容器 IP。


Docker Compose
https://www.oikiou.top/2025/60641507/
作者
Oikiou
发布于
2025年5月13日
许可协议