一、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

你将看到 webdb 两个容器在后台运行。


五、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. 使用外部日志系统

(例如 fluentdELKPrometheus


十五、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 管理本地容器集群运行任务
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐