# Docker Compose 使用教程
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令创建并启动所有服务。本教程将详细介绍 Docker Compose 的安装、配置和使用方法。
1. 什么是 Docker Compose
Docker Compose 允许你在一个 YAML 文件中定义所有服务,并通过简单的命令管理这些服务的整个生命周期。它特别适合开发环境、测试环境以及小型生产环境的部署。
主要优势:
- 简化多容器应用的部署流程
- 通过单一文件管理所有服务配置
- 支持服务之间的依赖关系
- 一键启动/停止整个应用堆栈
- 支持开发环境与生产环境的配置分离
2. 安装 Docker Compose
Linux 系统
1. 下载最新版本的 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2. 添加执行权限:
sudo chmod +x /usr/local/bin/docker-compose
3. 创建符号链接:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4. 验证安装:
docker-compose --version
macOS 和 Windows
Docker Desktop for Mac 和 Windows 已经内置了 Docker Compose,安装 Docker Desktop 后即可直接使用。
3. Docker Compose 基本概念
服务 (Service)
一个服务代表一个容器实例,可以包含多个运行相同镜像的容器。服务在 `docker-compose.yml` 文件中定义。
项目 (Project)
由一组关联的服务组成,通常对应一个完整的应用程序。
常用指令
- `version`: 指定 Compose 文件格式版本
- `services`: 定义各个服务
- `volumes`: 数据卷配置
- `networks`: 网络配置
- `configs`: 配置文件
- `secrets`: 敏感数据
4. 创建第一个 Compose 项目
我们将创建一个简单的 Web 应用,包含:
- 一个 Python Flask 应用
- 一个 Redis 缓存服务
项目结构
my_project/
├── app.py
├── requirements.txt
├── docker-compose.yml
└── Dockerfile
创建应用文件 (app.py)
from flask import Flask
import redis
import os
app = Flask(__name__)
redis_host = os.environ.get('REDIS_HOST', 'localhost')
redis_client = redis.Redis(host=redis_host, port=6379)
@app.route('/')
def hello():
count = redis_client.incr('hits')
return f'Hello World! I have been seen {count} times.\n'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
创建依赖文件 (requirements.txt)
flask
redis
创建 Dockerfile
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
创建 docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
REDIS_HOST: redis
depends_on:
- redis
redis:
image: "redis:alpine"
volumes:
- redis_data:/data
volumes:
redis_data:
5. 启动和管理服务
启动服务
在项目目录下运行:
docker-compose up
后台运行
docker-compose up -d
查看服务状态
docker-compose ps
查看服务日志
docker-compose logs -f
停止服务
docker-compose down
停止并删除数据卷
docker-compose down -v
6. 高级配置选项
环境变量使用
在 `docker-compose.yml` 中使用环境变量:
version: '3.8'
services:
web:
build: .
ports:
- "${WEB_PORT}:5000"
environment:
REDIS_HOST: redis
APP_ENV: ${APP_ENV}
创建 `.env` 文件:
WEB_PORT=8080
APP_ENV=production
健康检查
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/"]
interval: 30s
timeout: 10s
retries: 3
网络配置
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
networks:
- front-tier
- back-tier
redis:
image: "redis:alpine"
networks:
- back-tier
networks:
front-tier:
back-tier:
数据卷挂载
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app # 挂载当前目录到容器/app
- static_volume:/app/static
redis:
image: "redis:alpine"
volumes:
- redis_data:/data
volumes:
static_volume:
redis_data:
7. 扩展服务规模
增加服务实例
docker-compose up --scale web=3
在 docker-compose.yml 中配置
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
deploy:
replicas: 3
8. 生产环境注意事项
1. 安全配置:
- 避免使用 root 用户运行容器
- 使用非 root 镜像基础
- 限制容器的 capabilities
2. 资源限制:
version: '3.8'
services:
web:
build: .
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
3. 日志管理:
version: '3.8'
services:
web:
build: .
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
4. 使用 .env 文件:将环境变量与配置分离
5. 多环境配置:使用多个 Compose 文件
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
9. 实战案例:WordPress + MySQL
docker-compose.yml
version: '3.8'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
启动
docker-compose up -d
访问 `http://localhost:8000` 即可开始 WordPress 安装。
总结
Docker Compose 是一个强大而灵活的工具,通过声明式配置简化了多容器应用的部署和管理。它特别适合开发环境和小型生产环境的部署,能够显著提高开发效率。
本教程详细介绍了 Docker Compose 的安装、基本概念、项目创建、服务管理、高级配置以及生产环境注意事项。通过 Docker Compose,你可以:
- 使用单一文件定义复杂的多容器应用
- 简化开发、测试和部署流程
- 轻松管理服务之间的依赖关系
- 实现服务的快速扩展和缩减
- 保持环境一致性
随着容器化技术的普及,掌握 Docker Compose 已成为现代软件开发和运维的必备技能。建议读者通过实际项目练习加深理解,并进一步探索 Docker Swarm 和 Kubernetes 等更高级的编排工具。





