Docker Compose多容器编排
Docker Compose多容器编排
什么是Docker Compose
Docker Compose是一个用于定义和运行多容器Docker应用的工具。使用YAML文件配置应用的服务、网络和卷。
安装Docker Compose
# Linux
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version
基本语法
docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
depends_on:
- api
api:
build: ./api
ports:
- "3000:3000"
environment:
- DB_HOST=db
- DB_PORT=3306
networks:
- frontend
- backend
depends_on:
- db
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
networks:
- backend
volumes:
db_data:
networks:
frontend:
backend:
常用命令
基本操作
# 启动所有服务
docker-compose up
# 后台启动
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs
docker-compose logs -f web
# 重启服务
docker-compose restart web
构建和扩展
# 构建镜像
docker-compose build
# 重新构建并启动
docker-compose up --build
# 扩展服务
docker-compose up --scale web=3
# 查看构建日志
docker-compose build --no-cache
服务配置详解
环境变量
services:
api:
environment:
- NODE_ENV=production
- DB_HOST=db
env_file:
- .env
端口映射
services:
web:
ports:
- "80:80" # 主机:容器
- "127.0.0.1:8080:80" # 绑定IP
卷挂载
services:
api:
volumes:
- ./src:/app/src # 绑定挂载
- node_modules:/app/node_modules # 命名卷
- /tmp/cache:/tmp/cache # 匿名卷
volumes:
node_modules:
实践:完整Web应用
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
- static_files:/app/static
depends_on:
- api
networks:
- frontend
api:
build:
context: ./api
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- REDIS_URL=redis://redis:6379
- DATABASE_URL=mysql://db:3306/mydb
networks:
- frontend
- backend
depends_on:
- redis
- db
redis:
image: redis:alpine
volumes:
- redis_data:/data
networks:
- backend
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
networks:
- backend
secrets:
- db_root_password
volumes:
static_files:
redis_data:
db_data:
networks:
frontend:
backend:
secrets:
db_root_password:
file: ./secrets/db_root_password.txt
多环境配置
docker-compose.override.yml
# 开发环境配置
version: '3.8'
services:
api:
volumes:
- ./api/src:/app/src
environment:
- NODE_ENV=development
command: npm run dev
生产环境
# 使用生产配置
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
总结
Docker Compose简化了多容器应用的管理。通过声明式配置,可以轻松定义和运行复杂的微服务架构。