Docker Compose 是管理多容器 Docker 应用的标准工具。以下是主要使用方法:
一、基本命令
1. 启动服务
# 启动所有服务(在后台运行)
docker-compose up -d
# 启动指定服务
docker-compose up -d service_name
2. 停止服务
# 停止所有服务
docker-compose down
# 停止并删除卷(数据)
docker-compose down -v
3. 查看服务状态
# 查看运行中的服务
docker-compose ps
# 查看所有服务(包括停止的)
docker-compose ps -a
# 查看服务日志
docker-compose logs
docker-compose logs -f # 实时查看
docker-compose logs service_name # 查看特定服务
4. 管理服务生命周期
# 启动已停止的服务
docker-compose start
# 停止服务(不删除容器)
docker-compose stop
# 重启服务
docker-compose restart
# 暂停服务
docker-compose pause
# 恢复服务
docker-compose unpause
二、配置管理
1. 基础 docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
environment:
- NGINX_PORT=80
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
2. 环境变量管理
# 使用 .env 文件
# .env 文件内容:
DB_PASSWORD=mysecret
# docker-compose.yml 中引用:
db:
image: postgres
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
三、进阶使用
1. 构建和部署
# 构建镜像(如果使用 build)
docker-compose build
# 重新构建(强制)
docker-compose build --no-cache
# 拉取最新镜像
docker-compose pull
# 执行命令
docker-compose exec service_name command
# 示例:进入容器
docker-compose exec web bash
2. 配置文件管理
# 使用多个配置文件
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# 指定项目名称(避免命名冲突)
docker-compose -p myproject up -d
3. 查看配置
# 验证配置文件语法
docker-compose config
# 查看服务端口映射
docker-compose port web 80
四、常用场景示例
1. Web 应用栈(Nginx + PHP + MySQL)
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/var/www/html
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- php
php:
build: ./php
volumes:
- ./html:/var/www/html
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: appdb
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
mysql_data:
2. 开发环境热重载
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app # 代码挂载,实现热重载
environment:
- NODE_ENV=development
command: npm run dev
五、最佳实践
版本控制:将
docker-compose.yml 和
Dockerfile 加入版本控制
环境分离:使用不同的 compose 文件用于开发/测试/生产
数据持久化:使用命名卷(named volumes)管理数据
网络隔离:创建自定义网络增强安全性
资源限制:设置 CPU 和内存限制
健康检查:配置健康检查确保服务可用性
六、调试技巧
# 查看服务依赖图
docker-compose config --services
# 查看服务配置
docker-compose config --services | xargs -I {} sh -c 'echo "=== {} ===" && docker-compose config --services={}'
# 执行一次性命令(不启动服务)
docker-compose run --rm service_name command
# 清理无用资源
docker-compose down --rmi all # 删除镜像
docker-compose down --remove-orphans # 删除孤立的容器
七、Docker Compose v2 与 v1
从 Docker Desktop 开始,Compose 已集成到 Docker CLI 中:
# v1(传统)
docker-compose up
# v2(新版本)
docker compose up # 注意没有短横线
选择哪个版本取决于你的 Docker 安装方式,两者命令功能基本相同。