简介
对于寻求简化容器管理和应用程序部署的开发人员和 DevOps 专业人员来说,Docker Compose 是一个必不可少的工具。本全面教程提供了一个循序渐进的指南,用于理解和实施 Docker Compose,涵盖从基本配置到跨各种环境的高级部署技术的所有内容。
Docker Compose 基础
Docker Compose 简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的强大工具。它允许开发人员使用 YAML 文件来配置应用程序服务、网络和卷,简化了容器编排的过程。
核心概念
graph TD
A[Docker Compose] --> B[服务定义]
A --> C[多容器管理]
A --> D[环境配置]
| 关键概念 | 描述 |
|---|---|
| 服务 | 应用程序中的各个容器 |
| docker-compose.yml | 定义服务的配置文件 |
| 卷 | 容器的持久数据存储 |
| 网络 | 容器间通信 |
Docker Compose 示例配置
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes: -./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
在 Ubuntu 22.04 上的实际示例
安装 Docker Compose:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
运行多容器应用程序:
docker compose up -d
docker compose ps
docker compose down
用例
Docker Compose 适用于:
- 本地开发环境
- 自动化测试设置
- 单主机应用程序部署
- 微服务架构
配置与部署
Docker Compose 文件结构
graph TD
A[docker-compose.yml] --> B[版本]
A --> C[服务]
A --> D[网络]
A --> E[卷]
完整配置示例
version: "3.8"
services:
web:
image: python:3.9
build:
context:./app
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
-./app:/app
environment:
- DEBUG=true
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
default:
driver: bridge
volumes:
postgres_data:
环境配置管理
| 配置类型 | 描述 | 使用场景 |
|---|---|---|
| 环境变量 | 运行时配置 | 敏感数据、连接字符串 |
| .env 文件 | 外部环境配置 | 将配置与代码分离 |
| Docker 机密 | 保护敏感信息 | 密码、令牌 |
Ubuntu 22.04 上的部署命令
验证配置:
docker compose config
启动服务:
docker compose up -d
扩展服务:
docker compose up -d --scale web=3
监控服务:
docker compose ps
docker compose logs
容器网络策略
graph LR
A[容器网络] --> B[桥接网络]
A --> C[主机网络]
A --> D[覆盖网络]
卷管理技术
## 创建命名卷
docker volume create myvolume
## 列出卷
docker volume ls
## 检查卷详细信息
docker volume inspect myvolume
高级 Compose 技术
服务扩展与负载均衡
graph TD
A[负载均衡器] --> B[服务副本 1]
A --> C[服务副本 2]
A --> D[服务副本 3]
扩展配置
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
ports:
- "80:80"
动态服务管理
| 技术 | 命令 | 描述 |
|---|---|---|
| 扩展服务 | docker compose up --scale web=5 |
动态调整容器数量 |
| 滚动更新 | docker compose up --force-recreate |
以最小停机时间更新服务 |
| 选择性部署 | docker compose up service1 service2 |
部署特定服务 |
适用于生产环境的部署策略
## 验证配置
docker compose config
## 试运行部署
docker compose up --dry-run
## 生产环境部署
docker compose up -d --remove-orphans
容器健康检查
services:
web:
image: myapp:latest
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
高级网络
graph LR
A[自定义网络] --> B[内部通信]
A --> C[外部访问]
A --> D[服务发现]
监控与日志记录
## 实时服务日志
docker compose logs -f
## 资源监控
docker compose top
## 性能指标
docker stats
多环境配置
version: "3.8"
services:
web:
image: myapp:${ENV:-development}
environment:
- DATABASE_URL=${DATABASE_URL}
机密管理
## 创建 Docker 机密
echo "database_password" | docker secret create db_password -
## 在 Compose 文件中使用机密
services:
database:
secrets:
- db_password
总结
通过掌握 Docker Compose,开发人员可以简化复杂的应用程序架构,提高部署的一致性,并创建更具可扩展性和可维护性的容器化解决方案。本教程展示了如何利用 YAML 配置、管理服务、网络和卷,以及轻松高效地编排多容器应用程序。



