Docker Compose 的详细使用总结、常用命令及配置示例
以下是 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. 基础结构
version: '3.8' # 推荐使用 3.8+ 版本
services:service1: # 服务名称image: nginx:alpine # 使用现成镜像# 其他配置...service2:build: . # 基于 Dockerfile 构建镜像# 其他配置...
volumes: # 声明卷my_volume:
networks: # 声明网络my_network:
2. 完整配置示例:Web + MySQL + Redis
version: '3.8'services:web:build: .ports:- "8000:8000"volumes:- .:/app- static_volume:/app/staticenvironment:- DEBUG=Trueenv_file:- .envdepends_on:- db- redisdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: rootpassMYSQL_DATABASE: app_dbvolumes:- mysql_data:/var/lib/mysqlhealthcheck: # 健康检查test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]interval: 5stimeout: 3sretries: 5redis:image: redis:alpinevolumes:- redis_data:/datacommand: redis-server --requirepass yourpasswordvolumes:static_volume:mysql_data:redis_data:
四、关键配置项说明
1. 服务配置
build
:构建镜像(优先于image
)build:context: ./dir # Dockerfile 所在目录dockerfile: Dockerfile.prodargs: # 构建参数APP_VERSION: 1.0
ports
:端口映射ports:- "80:80" # 宿主机:容器- "443:443/tcp" # 指定协议- "3000-3005:3000-3005" # 范围映射
volumes
:数据卷volumes:- /host/path:/container/path # 绑定挂载- named_volume:/container/path # 命名卷- config_file.conf:/app/config.conf:ro # 只读挂载
2. 环境管理
environment
:直接定义变量environment:- DB_HOST=db- DB_PORT=3306
env_file
:从文件加载变量env_file:- .env- dev.env
3. 依赖与健康检查
depends_on
:控制启动顺序depends_on:- db- redis
healthcheck
:定义健康检查healthcheck:test: ["CMD-SHELL", "curl -f http://localhost/health || exit 1"]interval: 30stimeout: 10sretries: 3
4. 网络配置
services:frontend:networks:- frontendbackend:networks:- frontend- backendnetworks:frontend:driver: bridgebackend:driver: bridge
五、进阶使用技巧
1. 多环境配置
- 开发环境:挂载代码目录,启用调试模式
- 生产环境:使用构建好的镜像,限制资源
# 合并多个配置文件 docker compose -f docker-compose.yml -f docker-compose.prod.yml up
2. 资源限制
deploy: # 需 Swarm 模式resources:limits:cpus: '0.5'memory: 512Mreservations:memory: 256M
3. 扩展服务
# 启动 3 个 web 实例
docker compose up -d --scale web=3
六、常见问题与解决
-
容器启动顺序问题:
- 使用
depends_on
+healthcheck
确保依赖服务真正可用。
- 使用
-
端口冲突:
- 检查宿主机端口占用,或让 Docker 自动分配端口:
ports:- "3000" # 容器 3000 端口映射到宿主机随机端口
- 检查宿主机端口占用,或让 Docker 自动分配端口:
-
数据持久化:
- 始终使用命名卷(
named volume
)保存数据库等关键数据。
- 始终使用命名卷(
通过合理配置 docker-compose.yml
,您可以快速部署复杂的多容器应用。建议结合具体需求逐步完善配置,并善用 docker compose config
验证文件语法。