Docker Compose 从入门到精通:多容器编排与微服务部署全流程实战
一、Docker Compose 是什么
Docker Compose 是一个 多容器应用编排工具,用于定义和管理多个 Docker 容器的运行环境。
它通过一个简单的 docker-compose.yml 文件,定义应用所需的服务、网络、卷和依赖关系,实现“一键启动整个系统”。
一句话概括:
Docker Compose = 多容器管理 + 环境编排 + 一键启动。
二、Docker Compose 的核心特性
| 特性 | 描述 |
|---|---|
| 多容器编排 | 管理多个容器的生命周期(启动、停止、更新) |
| 声明式配置 | 使用 YAML 文件定义应用结构 |
| 一键部署 | docker-compose up 即可启动完整环境 |
| 内建网络隔离 | 自动创建隔离网络,容器间可用服务名通信 |
| 支持多环境配置 | 可通过 .env 文件控制参数 |
| 与 Docker 完全兼容 | 底层使用 Docker CLI 命令执行 |
三、安装与验证
1. 安装 Docker Compose
sudo apt update sudo apt install docker-compose -y
2. 验证版本
docker-compose version
输出:
docker-compose version 2.27.0
四、基础结构
docker-compose.yml 文件示例:
version: "3.9" services: web: image: nginx:latest ports: - "8080:80" db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: myapp
执行:
docker-compose up -d
验证:
docker ps
你将看到 web 和 db 两个容器在后台运行。
五、Compose 文件核心语法
| 指令 | 说明 |
|---|---|
version |
指定 Compose 文件版本 |
services |
定义容器服务 |
build |
构建镜像(指定 Dockerfile) |
image |
使用已有镜像 |
ports |
端口映射 |
environment |
环境变量 |
volumes |
数据卷挂载 |
depends_on |
定义依赖关系 |
networks |
网络定义 |
restart |
自动重启策略 |
六、构建自定义镜像
docker-compose.yml:
version: "3.8" services: app: build: . ports: - "5000:5000"
Dockerfile:
FROM python:3.10 WORKDIR /app COPY . . RUN pip install flask CMD ["python", "app.py"]
运行:
docker-compose up -d --build
七、定义网络与通信
Docker Compose 会自动为每个项目创建独立的网络。
同一网络下的容器可通过服务名访问。
示例:
services: web: image: nginx ports: - "8080:80" depends_on: - app app: image: myapp environment: DATABASE_HOST: db db: image: mysql environment: MYSQL_ROOT_PASSWORD: 123456
在 app 容器内可直接通过 db:3306 访问数据库。
八、环境变量配置
.env 文件:
MYSQL_PASSWORD=123456 MYSQL_DATABASE=myapp PORT=8080
docker-compose.yml:
services: db: image: mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} web: image: nginx ports: - "${PORT}:80"
九、数据持久化
挂载本地卷保存数据:
services: db: image: mysql:8 volumes: - db_data:/var/lib/mysql volumes: db_data:
删除容器后数据依然保留。
十、使用 depends_on 控制依赖顺序
services: app: build: ./app depends_on: - db db: image: mysql:8
app 会在 db 启动后执行,但并不会等待数据库初始化完成。
若需等待服务可用,建议在启动脚本中使用健康检查机制。
参考案例:www.phvrq.cn
十一、健康检查(healthcheck)
services: db: image: mysql:8 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3
可在其他服务中引用健康状态:
depends_on: db: condition: service_healthy
十二、扩容与负载均衡
运行多个实例:
docker-compose up --scale web=3 -d
自动创建:
web_1 web_2 web_3
这些容器共享相同的网络,可结合 Nginx 或 HAProxy 实现负载均衡。
十三、日志与调试
查看日志:
docker-compose logs -f
进入容器:
docker-compose exec web bash
停止所有容器:
docker-compose down
清理数据卷与网络:
docker-compose down -v
十四、生产环境优化
1. 使用 .env 管理机密信息
2. 使用轻量镜像(如 alpine)
3. 添加资源限制:
deploy: resources: limits: cpus: "0.5" memory: 512M
4. 使用外部日志系统
(例如 fluentd、ELK、Prometheus)
十五、Compose 文件分层
多环境配置(开发 / 生产):
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
开发版 docker-compose.yml:
services: app: build: . environment: - DEBUG=true
生产版 docker-compose.prod.yml:
services: app: environment: - DEBUG=false
十六、在 CI/CD 中使用
GitLab CI 示例:
stages: - deploy deploy: stage: deploy script: - docker-compose -f docker-compose.yml up -d --build
Jenkins Pipeline 示例:
stage('Deploy with Compose') { steps { sh 'docker-compose down' sh 'docker-compose up -d --build' } }
十七、Docker Compose + Nginx + Flask 实战
docker-compose.yml:
version: "3.8" services: web: build: ./web ports: - "80:80" depends_on: - app app: build: ./app expose: - "5000"
web/Dockerfile:
FROM nginx:latest COPY nginx.conf /etc/nginx/conf.d/default.conf
nginx.conf:
server { listen 80; location / { proxy_pass http://app:5000; } }
app/Dockerfile:
FROM python:3.10 WORKDIR /app COPY . . RUN pip install flask CMD ["python", "app.py"]
十八、使用 Compose 部署数据库集群
version: "3.9" services: master: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 123456 ports: - "3306:3306" slave: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 123456 depends_on: - master
通过环境变量配置主从同步脚本,即可快速搭建主从架构。
十九、常用命令总结
| 命令 | 说明 |
|---|---|
docker-compose up -d |
后台启动所有服务 |
docker-compose down |
停止并删除容器 |
docker-compose ps |
查看当前运行状态 |
docker-compose logs -f |
实时查看日志 |
docker-compose exec <service> bash |
进入容器终端 |
docker-compose restart |
重启服务 |
docker-compose build |
构建镜像 |
docker-compose config |
验证配置文件正确性 |
二十、企业级实战应用场景
| 场景 | 实践方案 |
|---|---|
| 微服务开发环境搭建 | 一键启动 Nginx + Redis + MySQL + 后端服务 |
| 测试环境自动化 | Compose 脚本定义依赖环境,自动部署测试系统 |
| 数据持久化部署 | 使用 Volume 保存数据库与日志 |
| 多环境配置管理 | 开发、测试、生产使用不同 Compose 文件 |
| 轻量级 CI/CD 流程 | 与 GitLab CI、Jenkins 集成快速发布 |
| 教育与演示环境 | 快速重现完整系统架构 |
| 边缘计算与IoT | Compose 管理本地容器集群运行任务 |
更多推荐
所有评论(0)