Docker Compose使用教程
1. 什么是Docker Compose
Docker Compose是Docker官方提供的容器编排工具,用于定义和运行多容器Docker应用程序。通过一个YAML文件配置所有服务,然后使用单个命令创建并启动所有服务。
2. 安装Docker Compose
• 下载Docker Compose二进制文件(以Linux为例):
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
• 添加执行权限:
sudo chmod +x /usr/local/bin/docker-compose
• 验证安装:
docker-compose --version
3. 基本概念
• **服务(Service)**:一个容器实例,如web服务器、数据库等
• **项目(Project)**:由一组关联的服务组成的应用程序
• **镜像(Image)**:用于创建容器的模板
• **容器(Container)**:镜像的运行实例
4. 编写docker-compose.yml文件
• 创建项目目录:
mkdir myapp && cd myapp
• 创建docker-compose.yml文件:
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydb
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
volumes:
db-data:
networks:
app-network:
5. 常用指令详解
• **version**:指定Compose文件格式版本
• **services**:定义所有服务
• **image**:指定服务使用的镜像
• **ports**:映射容器端口到主机
• **volumes**:挂载卷或目录
• **environment**:设置环境变量
• **networks**:配置网络
• **depends_on**:定义服务依赖关系
6. 常用命令
• 启动服务:
docker-compose up -d
• 查看运行的服务:
docker-compose ps
• 查看服务日志:
docker-compose logs -f web
• 停止服务:
docker-compose down
• 构建镜像:
docker-compose build
• 执行命令:
docker-compose exec web sh
7. 示例:部署WordPress应用
• 创建项目目录:
mkdir wordpress && cd wordpress
• 创建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:
db_data:
• 启动应用:
docker-compose up -d
• 访问http://localhost:8000完成WordPress安装
8. 管理应用
• 扩展服务实例:
docker-compose up -d --scale wordpress=3
• 更新服务:
docker-compose up -d --build
• 暂停服务:
docker-compose pause
• 恢复服务:
docker-compose unpause
• 删除容器和网络:
docker-compose down
• 删除容器、网络和数据卷:
docker-compose down -v
9. 环境变量管理
• 创建.env文件:
DB_PASSWORD=secret
WP_VERSION=latest
• 在docker-compose.yml中使用变量:
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
wordpress:
image: wordpress:${WP_VERSION}
10. 数据持久化
• 使用命名卷:
version: '3.8'
services:
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
• 使用绑定挂载:
services:
app:
image: myapp
volumes:
- ./static:/app/static
- ./config:/app/config
11. 网络配置
• 自定义网络:
version: '3.8'
services:
frontend:
image: myfrontend
networks:
- frontend-net
backend:
image: mybackend
networks:
- frontend-net
- backend-net
networks:
frontend-net:
backend-net:
driver: bridge
12. 生产环境最佳实践
• 使用健康检查:
version: '3.8'
services:
web:
image: mywebapp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
• 限制资源:
services:
db:
image: postgres
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
• 使用多阶段构建:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile.prod
13. 故障排除
• 查看服务日志:
docker-compose logs -f --tail=100 service_name
• 进入容器调试:
docker-compose run service_name bash
• 重建服务:
docker-compose up -d --force-recreate --no-deps service_name
14. 总结
Docker Compose通过简化的YAML配置和强大的命令行工具,极大地简化了多容器Docker应用的开发、部署和管理。无论是开发环境还是生产环境,Docker Compose都能提供一致、可靠的容器编排解决方案。通过本文介绍的核心概念、实用示例和最佳实践,您可以高效地构建和管理复杂的容器化应用。随着容器技术的不断发展,掌握Docker Compose已成为现代运维和开发人员的必备技能之一。




