Docker Compose 是一种工具,用于定义和运行多容器的 Docker 应用程序,使用 YAML 文件配置应用程序的服务。以下是一个详细的 Docker Compose 教程,从基础到实际应用:
1. Docker Compose 安装
sudo curl -L "https://github.com/docker/compose/releases/download/$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
• Windows 和 macOS:
Docker Desktop 自带 Docker Compose。
验证安装:
docker-compose --version
2. Docker Compose 基本概念
• docker-compose.yml 文件
Compose 项目核心文件,用来定义服务、网络和存储卷。
• 服务(Services)
定义单个容器的配置。
• 网络(Networks)
配置服务间的通信。
• 存储卷(Volumes)
定义数据持久化方式。
3. 创建一个简单的 docker-compose.yml 文件
以下是一个典型的例子,定义了一个包含 Nginx 和 Redis 的应用:
version: '3.9' # 指定 Docker Compose 文件版本
services: # 定义服务
web:
image: nginx:latest # 使用的镜像
ports:
- "8080:80" # 映射端口
volumes:
- ./html:/usr/share/nginx/html # 挂载本地目录到容器
networks:
- app-network
redis:
image: redis:alpine # 使用 Redis 的轻量镜像
networks:
- app-network
networks: # 定义网络
app-network:
driver: bridge
• 保存为 docker-compose.yml。
4. Docker Compose 常用命令
在 docker-compose.yml 文件所在目录运行:
1. 启动服务
docker-compose up
• -d: 后台运行。
docker-compose up -d
2. 停止服务
docker-compose down
• 删除网络、容器、数据卷等。
3. 查看服务状态
docker-compose ps
4. 重启服务
docker-compose restart
5. 构建镜像
如果有自定义镜像:
docker-compose build
6. 运行单个服务
docker-compose up web
7. 查看日志
docker-compose logs
• 指定服务:
docker-compose logs web
5. 自定义应用案例:PHP + MySQL + phpMyAdmin
以下是一个多容器 PHP 应用的例子:
version: '3.9'
services:
php:
image: php:8.1-apache
ports:
- "8080:80"
volumes:
- ./php-app:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- db-data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
db-data:
1. 启动服务:
docker-compose up -d
2. 访问:
• PHP 应用:http://localhost:8080
• phpMyAdmin:http://localhost:8081
6. 高级功能
1. 使用 .env 文件
环境变量文件 .env:
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=mydb
在 docker-compose.yml 中:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
2. 扩展和缩放服务
动态扩展服务实例:
docker-compose up --scale web=3
3. 健康检查
定义服务健康状态:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
7. 清理未使用资源
清理停止的容器、未使用的网络和悬空的数据卷:
docker system prune -f
docker volume prune -f
8. 调试和问题排查
• 查看日志:
docker-compose logs
• 进入容器:
docker exec -it <container_id> bash
9. 参考文档
• Docker Compose 官方文档:https://docs.docker.com/compose/