docekr-compose.yml的介绍
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序的服务。
docker-compose.yml
的基本结构,主要包含以下主要部分:
version: '3.8'
: 指定使用的 compose 文件版本
services
:定义各个服务
networks
:定义网络
volumes
:定义卷
- 在.yml文件中定义各个服务
- 使用现有镜像
services:
web: # 第一个服务的名称
image: nginx:latest # 服务使用的镜像
ports: # 容器和主机的端口映射
- "80:80"
- 构建自定义镜像
services:
app: # 服务1的名称
build: # 构建镜像
context: . # Dockerfile 所在目录
dockerfile: Dockerfile.dev # 自定义 Dockerfile 文件名。默认使用 context 目录下的 Dockerfile
args: # 构建时变量(对应 Dockerfile 中的 ARG)。需先在 Dockerfile 中声明
APP_VERSION: 1.0
ENV: "production"
target: builder # 多阶段构建的目标阶段,指定构建到某个阶段停止
cache_from: # 缓存来源,从指定镜像中复用缓存层加速构建
- myapp:latest
labels: # 为镜像添加元数据
com.example.description: "My custom app"
network: host # 构建时的网络模式,默认为default
image: app:1.0 # 构建后生成的镜像名称
ports:
- "5000:5000"
- .yml文件中的网络配置
networks:
app_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
- .yml中的卷配置
volumes:
db_data:
driver: local
app_data:
external: true
- 完整示例
Python Web 应用 + Redis
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
env_file:
- .env
depends_on:
redis:
condition: service_healthy
restart: unless-stopped
networks:
- backend
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
redis:
image: redis:7.0-alpine
env_file:
- .env
command: redis-server --requirepass $$REDIS_PASSWORD
healthcheck:
test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "$$REDIS_PASSWORD", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- redis_data:/data
restart: unless-stopped
networks:
- backend
deploy:
resources:
limits:
cpus: '0.3'
memory: 256M
volumes:
redis_data:
networks:
backend:
driver: bridge
- 高级配置
- 健康检查
services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
- 资源限制
services:
app:
image: app-image
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
- 多容器扩展
services:
worker:
image: worker-image
deploy:
replicas: 3
- 配置过程中需要注意的事项
- 版本控制:始终指定 compose 文件版本
- 环境变量:敏感信息使用环境变量或 secrets
- 服务分离:每个容器只运行一个主要进程
- 网络隔离:为不同应用使用不同网络
- 卷持久化:重要数据使用命名卷
- 日志配置:合理配置日志驱动和选项
- docker-compose的常用命令
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 构建服务
docker-compose build
# 执行命令
docker-compose exec service_name command
总结:通过合理编写 docker-compose.yml
文件,您可以轻松定义和管理复杂的多容器应用程序。