多服务编排实践
使用 Docker Compose 编排多服务应用的实践案例
📋 目录
Web 应用 + 数据库
基本配置
version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db
environment:
- DATABASE_URL=postgres://db:5432/mydb
db:
image: postgres:13
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:启动服务
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f微服务架构编排
微服务配置
version: '3.8'
services:
api-gateway:
image: nginx:latest
ports:
- "80:80"
depends_on:
- api
- auth
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
api:
build: ./api
environment:
- DATABASE_URL=postgres://db:5432/mydb
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
auth:
build: ./auth
environment:
- DATABASE_URL=postgres://db:5432/mydb
depends_on:
- db
db:
image: postgres:13
environment:
- POSTGRES_PASSWORD=password
volumes:
- db-data:/var/lib/postgresql/data
redis:
image: redis:latest
networks:
default:
name: microservices-network
volumes:
db-data:前后端分离项目
配置示例
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:80"
depends_on:
- backend
environment:
- API_URL=http://backend:8080
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- db
environment:
- DATABASE_URL=postgres://db:5432/mydb
db:
image: postgres:13
environment:
- POSTGRES_PASSWORD=password
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:服务依赖管理
depends_on
services:
web:
image: nginx:latest
depends_on:
- db
- cache
db:
image: postgres:13
cache:
image: redis:latest健康检查依赖
services:
web:
image: nginx:latest
depends_on:
db:
condition: service_healthy
db:
image: postgres:13
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5服务扩展(scale)
扩展服务
# 扩展 web 服务到 3 个实例
docker-compose up -d --scale web=3
# 扩展多个服务
docker-compose up -d --scale web=3 --scale api=2负载均衡配置
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
depends_on:
- web
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
web:
build: .
# 多个实例会自动负载均衡完整实践案例
LAMP 栈
version: '3.8'
services:
web:
image: php:8.0-apache
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=mydb
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:MEAN 栈
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:80"
depends_on:
- api
api:
build: ./api
ports:
- "8080:3000"
depends_on:
- db
environment:
- DATABASE_URL=mongodb://db:27017/mydb
db:
image: mongo:5.0
volumes:
- db-data:/data/db
volumes:
db-data: