一、Docker Compose 简介
Docker Compose 是 Docker 官方提供的多容器编排工具,通过 YAML 文件(docker-compose.yml
)定义应用程序的服务、网络和卷,实现一键式容器管理。其核心优势包括:
- 简化多容器管理:通过单一文件管理多个关联容器。
- 开发环境标准化:团队共享相同的环境配置。
- 快速环境搭建:一条命令启动复杂应用栈。
- 服务依赖管理:自动处理服务间的依赖关系。
- 配置即代码:版本控制环境配置。
二、安装 Docker Compose
-
前置条件:
- 已安装 Docker Engine(版本需与 Compose 兼容)。
- Linux 系统建议配置镜像加速器(如阿里云、清华源)。
-
安装步骤:
-
Linux/macOS :
bash# 下载最新版二进制文件(替换版本号) sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 添加执行权限 sudo chmod +x /usr/local/bin/docker-compose # 验证安装 docker-compose --version
-
Windows:通过 Docker Desktop 内置安装(需启用 WSL2 或 Hyper-V)。
-
三、核心概念与文件结构
-
docker-compose.yml
文件结构:yamlversion: '3.8' # 指定 Compose 版本 services: # 容器服务定义 web: # 服务名称 image: nginx:latest # 使用官方镜像 ports: - "80:80" # 端口映射(宿主机:容器) volumes: - ./html:/usr/share/nginx/html # 挂载数据卷 depends_on: - db # 依赖其他服务 networks: - custom_network # 使用自定义网络 db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 # 环境变量 networks: - custom_network networks: custom_network: driver: bridge # 使用 bridge 网络驱动 ipam: config: - subnet: 172.16.238.0/24 # 指定子网范围
-
核心配置字段:
- 服务字段(services):定义容器配置,如镜像、端口、卷等。
- 网络与存储配置(networks/volumes):管理容器间的网络和数据持久化。
四、环境变量管理
-
.env
文件:-
集中管理环境变量,使配置与代码分离。
-
文件格式为键值对(每行一个变量,不支持多行值):
ini# .env 文件示例 DB_PASSWORD=mysecret WEB_PORT=8080 ENVIRONMENT=dev
-
-
在
docker-compose.yml
中引用变量:-
使用
${变量名}
或${变量名:-默认值}
(若变量未定义,使用默认值)。 -
示例:
yamlversion: "3.8" services: db: image: mysql:${MYSQL_VERSION:-5.7} environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} web: image: nginx ports: - "${WEB_PORT}:80"
-
-
多环境配置切换:
-
开发环境 (
.env.dev
):iniENVIRONMENT=dev WEB_PORT=8080
-
生产环境 (
.env.prod
):iniENVIRONMENT=prod WEB_PORT=80
-
启动时指定环境文件:
bashdocker-compose --env-file .env.prod up
-
五、常用命令实战
-
基础命令:
-
启动所有服务(后台模式):
bashdocker-compose up -d
-
查看运行状态:
bashdocker-compose ps
-
停止服务:
bashdocker-compose stop
-
停止并删除容器:
bashdocker-compose down
-
重建服务:
bashdocker-compose up -d --build
-
-
调试命令:
-
查看服务日志:
bashdocker-compose logs -f web
-
执行一次性命令:
bashdocker-compose run --rm web python manage.py migrate
-
进入运行中容器:
bashdocker-compose exec db psql -U postgres
-
-
扩展操作:
-
水平扩展服务实例:
bashdocker-compose up -d --scale web=3
-
查看服务资源使用:
bashdocker-compose top
-
验证配置文件:
bashdocker-compose config
-
六、进阶技巧与最佳实践
-
YAML 语法规范:
- 使用空格缩进(禁止 Tab),键值对冒号后加空格。
- 数字/特殊字符环境变量需用引号包裹(如
"8080:80"
)。
-
性能优化:
- 使用
restart: unless-stopped
实现容器自动重启。 - 通过
deploy/resource/limits
限制 CPU/内存。
- 使用
-
多环境配置:
- 使用
.env
文件管理环境变量。 - 分环境编写多个 Compose 文件(如
docker-compose.prod.yml
)。
- 使用
-
多机管理部署:
- Docker Swarm :使用
docker swarm
进行多机部署。 - Kubernetes :结合
Kompose
工具将 Compose 文件转换为 Kubernetes 配置。
- Docker Swarm :使用