以下是 Docker Compose 的详细使用总结、常用命令及配置示例,帮助您快速掌握这一容器编排工具。
一、Docker Compose 核心概念
- 定位:用于定义和管理多容器 Docker 应用,通过 YAML 文件配置服务、网络、卷等资源。
- 核心概念 :
- 服务 (Service):一个容器的定义(镜像、端口、环境变量等)。
- 项目 (Project):一组关联服务的集合,默认以当前目录名命名。
- 核心文件 :
docker-compose.yml
(或通过-f
指定其他文件)。
二、Docker Compose 常用命令
1. 基础操作
命令 | 作用 | 常用参数 |
---|---|---|
docker compose up |
创建并启动服务 | -d (后台运行)、--build (强制重建镜像) |
docker compose down |
停止并删除所有资源 | -v (同时删除卷)、--rmi all (删除镜像) |
docker compose build |
构建服务镜像 | --no-cache (禁用缓存) |
docker compose logs |
查看日志 | -f (实时跟踪)、service_name (过滤服务) |
2. 管理服务
命令 | 作用 |
---|---|
docker compose ps |
查看容器状态 |
docker compose start |
启动已停止的服务 |
docker compose stop |
停止运行中的服务 |
docker compose restart |
重启服务 |
docker compose exec <service> <cmd> |
在容器内执行命令(如 exec app sh ) |
3. 调试与扩展
命令 | 作用 |
---|---|
docker compose config |
验证配置文件语法 |
docker compose top |
显示容器内进程 |
docker compose pull |
拉取服务的最新镜像 |
docker compose scale web=3 |
扩展服务实例数量(需删除 depends_on ) |
三、docker-compose.yml 配置详解
1. 基础结构
yaml
version: '3.8' # 推荐使用 3.8+ 版本
services:
service1: # 服务名称
image: nginx:alpine # 使用现成镜像
# 其他配置...
service2:
build: . # 基于 Dockerfile 构建镜像
# 其他配置...
volumes: # 声明卷
my_volume:
networks: # 声明网络
my_network:
2. 完整配置示例:Web + MySQL + Redis
yaml
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
- static_volume:/app/static
environment:
- DEBUG=True
env_file:
- .env
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: app_db
volumes:
- mysql_data:/var/lib/mysql
healthcheck: # 健康检查
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 5
redis:
image: redis:alpine
volumes:
- redis_data:/data
command: redis-server --requirepass yourpassword
volumes:
static_volume:
mysql_data:
redis_data:
四、关键配置项说明
1. 服务配置
-
build
:构建镜像(优先于image
)yamlbuild: context: ./dir # Dockerfile 所在目录 dockerfile: Dockerfile.prod args: # 构建参数 APP_VERSION: 1.0
-
ports
:端口映射yamlports: - "80:80" # 宿主机:容器 - "443:443/tcp" # 指定协议 - "3000-3005:3000-3005" # 范围映射
-
volumes
:数据卷yamlvolumes: - /host/path:/container/path # 绑定挂载 - named_volume:/container/path # 命名卷 - config_file.conf:/app/config.conf:ro # 只读挂载
2. 环境管理
-
environment
:直接定义变量yamlenvironment: - DB_HOST=db - DB_PORT=3306
-
env_file
:从文件加载变量yamlenv_file: - .env - dev.env
3. 依赖与健康检查
-
depends_on
:控制启动顺序yamldepends_on: - db - redis
-
healthcheck
:定义健康检查yamlhealthcheck: test: ["CMD-SHELL", "curl -f http://localhost/health || exit 1"] interval: 30s timeout: 10s retries: 3
4. 网络配置
yaml
services:
frontend:
networks:
- frontend
backend:
networks:
- frontend
- backend
networks:
frontend:
driver: bridge
backend:
driver: bridge
五、进阶使用技巧
1. 多环境配置
-
开发环境:挂载代码目录,启用调试模式
-
生产环境 :使用构建好的镜像,限制资源
bash# 合并多个配置文件 docker compose -f docker-compose.yml -f docker-compose.prod.yml up
2. 资源限制
yaml
deploy: # 需 Swarm 模式
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
memory: 256M
3. 扩展服务
bash
# 启动 3 个 web 实例
docker compose up -d --scale web=3
六、常见问题与解决
-
容器启动顺序问题:
- 使用
depends_on
+healthcheck
确保依赖服务真正可用。
- 使用
-
端口冲突:
-
检查宿主机端口占用,或让 Docker 自动分配端口:
yamlports: - "3000" # 容器 3000 端口映射到宿主机随机端口
-
-
数据持久化:
- 始终使用命名卷(
named volume
)保存数据库等关键数据。
- 始终使用命名卷(
通过合理配置 docker-compose.yml
,您可以快速部署复杂的多容器应用。建议结合具体需求逐步完善配置,并善用 docker compose config
验证文件语法。