Compose 文件编写指南
Docker Compose 文件的完整配置指南
📋 目录
文件版本
version 字段
version: '3.8'注意:新版本的 Docker Compose 可以省略 version 字段。
版本选择
3.8:推荐使用,功能完整3.7:较旧版本2.x:旧版本格式
服务定义
基本服务
services:
web:
image: nginx:latest
container_name: my-nginx
ports:
- "8080:80"使用 Dockerfile 构建
services:
web:
build:
context: .
dockerfile: Dockerfile
args:
- VERSION=1.0.0端口映射
services:
web:
image: nginx:latest
ports:
- "8080:80" # 简单映射
- "127.0.0.1:8080:80" # 指定 IP
- "8443:443" # 多个端口环境变量
services:
web:
image: nginx:latest
environment:
- NODE_ENV=production
- PORT=3000
# 或使用字典格式
environment:
NODE_ENV: production
PORT: 3000使用 .env 文件
services:
web:
image: nginx:latest
env_file:
- .env
- .env.production网络配置
默认网络
services:
web:
image: nginx:latest
db:
image: postgres:13
# 自动创建默认网络,服务可以通过服务名通信自定义网络
services:
web:
image: nginx:latest
networks:
- frontend
db:
image: postgres:13
networks:
- backend
networks:
frontend:
driver: bridge
backend:
driver: bridge网络配置选项
networks:
my-network:
driver: bridge
driver_opts:
com.docker.network.bridge.name: my-bridge
ipam:
config:
- subnet: 172.20.0.0/16数据卷配置
命名数据卷
services:
db:
image: postgres:13
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
driver: local绑定挂载
services:
web:
image: nginx:latest
volumes:
- ./app:/app
- ./config:/etc/nginx/conf.d:ro临时文件系统
services:
web:
image: nginx:latest
tmpfs:
- /tmp
- /var/cache环境变量
在 Compose 文件中定义
services:
web:
image: nginx:latest
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/mydb使用 .env 文件
# .env 文件
NODE_ENV=production
DATABASE_URL=postgres://db:5432/mydbservices:
web:
image: nginx:latest
env_file:
- .env变量替换
services:
web:
image: nginx:${VERSION:-latest}
ports:
- "${PORT:-8080}:80"依赖关系
depends_on
services:
web:
image: nginx:latest
depends_on:
- db
- redis
db:
image: postgres:13
redis:
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配置变量与模板
使用变量
version: '3.8'
services:
web:
image: ${IMAGE_NAME:-nginx}:${IMAGE_TAG:-latest}
ports:
- "${HOST_PORT:-8080}:80"环境变量文件
# .env
IMAGE_NAME=nginx
IMAGE_TAG=latest
HOST_PORT=8080条件配置
services:
web:
image: nginx:latest
# 使用条件配置
deploy:
replicas: ${REPLICAS:-1}完整示例
Web 应用 + 数据库 + Redis
version: '3.8'
services:
web:
build: .
ports:
- "${HOST_PORT:-8080}:80"
depends_on:
- db
- redis
environment:
- DATABASE_URL=postgres://db:5432/mydb
- REDIS_URL=redis://redis:6379
networks:
- app-network
db:
image: postgres:13
environment:
- POSTGRES_PASSWORD=${DB_PASSWORD:-password}
- POSTGRES_DB=${DB_NAME:-mydb}
volumes:
- db-data:/var/lib/postgresql/data
networks:
- app-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:latest
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
db-data: