Docker Compose编排实战
·
前言
Docker Compose是管理多容器应用的利器。本文介绍Docker Compose的高级用法和最佳实践。
一、Compose基础
1. 基本结构
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
2. 常用命令
# 启动
docker-compose up -d
# 停止
docker-compose down
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 进入容器
docker-compose exec web bash
二、服务依赖
1. depends_on
services:
web:
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
db:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
2. 健康检查
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
三、资源限制
1. CPU和内存限制
services:
web:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
2. 扩展副本
services:
web:
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
四、网络配置
1. 自定义网络
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true
services:
web:
networks:
- frontend
- backend
db:
networks:
- backend
2. 服务发现
services:
web:
networks:
app_net:
aliases:
- api.local
- web.local
networks:
app_net:
五、实战案例
1. WordPress完整部署
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./wordpress:/var/www/html:ro
depends_on:
- wordpress
wordpress:
image: wordpress:php8.2-fpm-alpine
volumes:
- ./wordpress:/var/www/html
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wp_password
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wp_password
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db_data:
2. 监控栈
version: '3.8'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin
volumes:
- grafana_data:/var/lib/grafana
node-exporter:
image: prom/node-exporter
ports:
- "9100:9100"
volumes:
grafana_data:
六、最佳实践
1. 环境变量
# .env
MYSQL_ROOT_PASSWORD=secret
WORDPRESS_URL=https://example.com
# docker-compose.yml
services:
db:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
2. 多Compose文件
# 基础配置
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
七、总结
Docker Compose优势:
- 一键部署多容器应用
- 声明式配置,易于版本管理
- 服务编排,自动处理依赖
- 资源控制,合理分配资源
- 网络隔离,安全可靠
提醒:本文内容基于公开资料整理,实际选择时请以各服务商官方信息为准。
本文内容部分信息摘自vpsvip.net主机测评网站
更多推荐
所有评论(0)