一、Docker Compose 简介
- 什么是 Docker Compose?
- 用于定义和运行多容器 Docker 应用的工具。
- Docker Compose 的主要功能
- 使用
docker-compose.yml
文件定义服务。 - 一键启动和管理多容器环境。
- 使用
- 安装与环境准备
- 安装 Docker 和 Docker Compose。
- 检查版本:
docker-compose --version
。
二、Docker Compose 的基本概念
- 核心组件
- 服务 (Services):构成应用的各个容器。
- 网络 (Networks):服务之间的通信方式。
- 卷 (Volumes):持久化存储。
docker-compose.yml
文件结构- 版本声明:
version: "3.9"
。 - 服务配置:
services
。 - 网络配置:
networks
。 - 卷配置:
volumes
。
- 版本声明:
三、Docker Compose 的基本使用
- 创建一个简单的
docker-compose.yml
文件
示例:运行一个 Nginx 容器
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "8080:80"
- 常用命令
- 启动服务:
docker-compose up
。 - 后台启动:
docker-compose up -d
。 - 查看运行容器:
docker-compose ps
。 - 停止服务:
docker-compose down
。
- 启动服务:
四、进阶配置
-
使用环境变量
version: "3.9"
services:
web:
image: nginx:${NGINX_VERSION}
使用 .env
文件设置环境变量:NGINX_VERSION=latest
。
2、定义多个服务
-
示例:Web + 数据库组合(Nginx + MySQL)
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
五、Compose 网络与卷
-
网络的使用
- 默认网络类型:
bridge
。 - 自定义网络:
networks:
my-network:
driver: bridge - 默认网络类型:
服务绑定到网络:
services:
web:
networks:
- my-network
2、卷的持久化存储
-
定义卷:
volumes:
data-volume: -
挂载卷:
services:
db:
image: mysql:5.7
volumes:
- data-volume:/var/lib/mysql
六、调试与排错
- 查看日志:
docker-compose logs
。 - 查看特定服务日志:
docker-compose logs service_name
。 - 重启服务:
docker-compose restart
。 - 清理无用资源:
docker-compose down --volumes
。
七、实际案例:复杂应用部署
-
LAMP 堆栈 (Linux, Apache, MySQL, PHP)
version: "3.9"
services:
web:
image: php:7.4-apache
ports:
- "8080:80"
volumes:
- ./code:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example -
使用 Traefik 作为反向代理
- 配置示例。
八、CI/CD 中的 Docker Compose
- 在 GitHub Actions 中使用 Docker Compose。
- 集成 Jenkins、GitLab CI 等工具。
九、高级技巧
- 使用
extends
复用配置。 - 与 Swarm 模式结合,扩展为分布式集群。
十、优化与性能调优
-
减少构建时间:使用多阶段构建。
-
合理配置资源限制:
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"