Docker Compose 参考
Docker Compose 概述
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
本参考文档基于 Docker Compose V2 版本。如果您使用的是旧版本,某些配置可能不适用。
基本结构
一个典型的 docker-compose.yml 文件包含以下主要部分:services(服务)、networks(网络)和 volumes(数据卷)。
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
networks:
frontend:
backend:
服务配置参考
构建配置
用于配置服务的构建选项
配置项 | 说明 |
---|---|
build | 指定构建上下文路径 |
context | 构建的上下文路径 |
dockerfile | 指定 Dockerfile 文件名 |
args | 构建参数 |
运行配置
用于配置服务的运行时选项
配置项 | 说明 |
---|---|
command | 覆盖默认命令 |
entrypoint | 覆盖默认入口点 |
environment | 设置环境变量 |
env_file | 从文件加载环境变量 |
网络配置
Docker Compose 允许您定义多个网络,服务可以连接到这些网络。
networks:
frontend:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
backend:
driver: bridge
数据卷配置
数据卷用于持久化数据和共享数据。
volumes:
db_data:
driver: local
cache:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
o: size=100m
完整示例
以下是一个包含多个服务、网络和数据卷的完整示例。
version: "3.8"
services:
web:
build:
context: ./web
dockerfile: Dockerfile
ports:
- "80:80"
depends_on:
- api
networks:
- frontend
- backend
environment:
- API_URL=http://api:3000
api:
build: ./api
ports:
- "3000:3000"
depends_on:
- db
- redis
networks:
- backend
environment:
- DB_HOST=db
- REDIS_HOST=redis
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
networks:
- backend
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
redis:
image: redis:alpine
networks:
- backend
volumes:
- redis_data:/data
volumes:
db_data:
redis_data:
networks:
frontend:
backend:
最佳实践
版本控制
将 docker-compose.yml 文件纳入版本控制系统
- 使用 .env 文件存储敏感信息
- 在 .gitignore 中排除 .env 文件
- 提供 .env.example 作为模板
服务命名
采用清晰的服务命名规范
- 使用有意义的服务名称
- 避免使用特殊字符
- 保持命名一致性
网络规划
合理规划网络结构
- 按功能分离网络
- 限制服务的网络访问
- 使用自定义网络而不是 links
数据持久化
正确管理数据持久化
- 使用命名卷而不是绑定挂载
- 为重要数据配置备份策略
- 注意数据卷的权限设置