了解docker-compose.yml
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 目录下的 Dockerfileargs: # 构建时变量(对应 Dockerfile 中的 ARG)。需先在 Dockerfile 中声明APP_VERSION: 1.0ENV: "production"target: builder # 多阶段构建的目标阶段,指定构建到某个阶段停止cache_from: # 缓存来源,从指定镜像中复用缓存层加速构建- myapp:latestlabels: # 为镜像添加元数据com.example.description: "My custom app"network: host # 构建时的网络模式,默认为defaultimage: app:1.0 # 构建后生成的镜像名称ports:- "5000:5000"
- .yml文件中的网络配置
networks:app_network:driver: bridgeipam:config:- subnet: 172.20.0.0/16
- .yml中的卷配置
volumes:db_data:driver: localapp_data:external: true
- 完整示例
Python Web 应用 + Redis
version: '3.8'services:web:build:context: .dockerfile: Dockerfileports:- "5000:5000"environment:- REDIS_HOST=redis- REDIS_PORT=6379env_file:- .envdepends_on:redis:condition: service_healthyrestart: unless-stoppednetworks:- backenddeploy:resources:limits:cpus: '0.5'memory: 512Mredis:image: redis:7.0-alpineenv_file:- .envcommand: redis-server --requirepass $$REDIS_PASSWORDhealthcheck:test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "$$REDIS_PASSWORD", "ping"]interval: 10stimeout: 5sretries: 5volumes:- redis_data:/datarestart: unless-stoppednetworks:- backenddeploy:resources:limits:cpus: '0.3'memory: 256Mvolumes:redis_data:networks:backend:driver: bridge
- 高级配置
- 健康检查
services:web:image: nginxhealthcheck:test: ["CMD", "curl", "-f", "http://localhost"]interval: 1m30stimeout: 10sretries: 3
- 资源限制
services:app:image: app-imagedeploy:resources:limits:cpus: '0.50'memory: 512M
- 多容器扩展
services:worker:image: worker-imagedeploy: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
文件,您可以轻松定义和管理复杂的多容器应用程序。