docker-compose.yml结构
从以下示例文件展开说说 docker-compose.yml 文件的结构
# 指定 Docker Compose 文件版本
version: '3.8'
# 定义服务
services:
# Web 服务
web:
build: . # 使用当前目录下的 Dockerfile 构建镜像
ports:
- "5000:5000" # 将容器端口 5000 映射到主机端口 5000
volumes:
- .:/app # 将当前目录挂载到容器的 /app 目录
environment:
- FLASK_ENV=development # 设置环境变量
depends_on:
- redis # 依赖 redis 服务
networks:
- app_network # 使用自定义网络
# Redis 服务
redis:
image: redis:alpine # 使用官方 Redis 镜像
ports:
- "6379:6379" # 将容器端口 6379 映射到主机端口 6379
volumes:
- redis_data:/data # 使用命名卷持久化 Redis 数据
networks:
- app_network # 使用自定义网络
# 定义网络
networks:
app_network:
driver: bridge # 使用桥接网络驱动
# 定义数据卷
volumes:
redis_data: # 定义名为 redis_data 的数据卷
1. 全局配置
version
:指定 Docker Compose 文件版本( 如3.8
)。services
:定义应用中的各个服务。networks
:定义自定义网络。volumes
:定义数据卷。
2. 服务配置
每个服务可以包含以下参数:
1. build
- 指定构建镜像的 Dockerfile 路径。
- 示例:
build: .
build:
context: ./dir
dockerfile: Dockerfile-alternate
2. image
- 指定使用的镜像名称。
- 示例:
image: nginx:alpine
3. ports
- 将容器端口映射到主机端口。
- 示例:
ports:
- "80:80"
- "443:443"
4. volumes
- 挂载主机目录或数据卷到容器中。
- 示例:
volumes:
- /host/path:/container/path
- named_volume:/container/path
5. environment
- 设置环境变量。
- 示例:
environment:
- VAR1=value1
- VAR2=value2
6. depends_on
- 定义服务之间的依赖关系。
- 示例:
depends_on:
- db
- redis
7. networks
- 指定服务使用的网络。
- 示例:
networks:
- app_network
8. restart
- 设置容器重启策略。
- 示例:
restart: always
9. command
- 覆盖容器启动时的默认命令。
- 示例:
command: python app.py
10. healthcheck
- 定义健康检查。
- 示例:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
11. deploy
- 指定部署配置(仅适用于 Docker Swarm 模式)。
- 示例:
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M
3. 网络配置
driver
:指定网络驱动(如bridge
、overlay
)。ipam
:配置 IP 地址管理。- 示例:
networks:
app_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
4. 数据卷配置
driver
:指定卷驱动(如local
、nfs
)。driver_opts
:指定驱动选项。- 示例:
volumes:
named_volume:
driver: local
driver_opts:
type: none
device: /host/path
o: bind
5. 完整示例
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
environment:
- FLASK_ENV=development
depends_on:
- redis
networks:
- app_network
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- app_network
networks:
app_network:
driver: bridge
volumes:
redis_data:
注意
在 YAML 语法中缩进尤为重要!错误缩进会导致 docker-compose up 启动失败!