本帖最后由 Qter 于 2025-3-2 23:17 编辑
以下是 docker-compose 的详细介绍,涵盖核心概念、常用命令、配置文件及实际应用场景,帮助你高效管理多容器应用。
1. docker-compose 是什么?docker-compose 是 Docker 官方的 容器编排工具,用于通过一个 YAML 文件(docker-compose.yml)定义和运行多个关联的容器。它简化了多容器应用的启动、停止和管理流程。 核心价值: · 一键启动多容器环境(如同时启动 Web 服务、数据库、缓存)。 · 声明式配置:所有容器参数集中在一个文件中,便于版本控制和复用。 · 依赖管理:自动处理容器间的启动顺序和网络连接。
2. 核心概念(1) docker-compose.yml 配置文件定义容器组(称为 services)及其参数,例如: version: "3.9" # Compose 版本services: web: # 服务名称 image: nginx:latest # 使用镜像 ports: - "80:80" # 端口映射 volumes: - ./html:/usr/share/nginx/html # 挂载目录 depends_on: # 依赖项 - db db: image: mysql:8.0 environment: # 环境变量 MYSQL_ROOT_PASSWORD: secret (2) 服务(Services)每个服务对应一个容器,可以定义镜像、端口、卷、环境变量等参数。 (3) 网络(Networks)默认自动创建专用网络,同一 Compose 文件中的容器可通过服务名互相通信(如 web 容器可通过 db 主机名访问数据库)。
3. 常用命令 | | | | | | | | | | | | | | | | | | docker-compose exec <服务名> <命令> | |
4. 典型使用场景(1) 本地开发环境一键启动包含数据库、消息队列、后端 API 的完整环境: docker-compose up -d (2) 微服务调试通过 Compose 定义多个微服务及其依赖: services: frontend: build: ./frontend # 使用 Dockerfile 构建镜像 ports: - "3000:3000" backend: build: ./backend environment: DB_URL: "postgres://db:5432" depends_on: - db db: image: postgres:14 (3) 持续集成(CI)在 CI 流水线中使用 docker-compose 运行测试: docker-compose up -ddocker-compose exec web pytest # 在 web 服务中运行测试docker-compose down
5. 配置文件详解(示例)version: "3.9" services: web: build: . # 基于当前目录的 Dockerfile 构建镜像 ports: - "5000:5000" # 端口映射(宿主机:容器) environment: FLASK_ENV: development volumes: - .:/code # 挂载代码目录(实时同步修改) depends_on: - redis redis: image: "redis:alpine" volumes: - redis_data:/data # 命名卷持久化数据 volumes: redis_data: # 定义命名卷
6. 高级技巧(1) 多环境配置通过 -f 指定不同配置文件,区分开发和生产环境: # 开发环境docker-compose -f docker-compose.yml -f docker-compose.dev.yml up # 生产环境docker-compose -f docker-compose.yml -f docker-compose.prod.yml up (2) 变量替换在 Compose 文件中使用环境变量: services: db: image: "postgres  {POSTGRES_VERSION:-14}" # 默认值 14 environment: POSTGRES_PASSWORD: ${DB_PASSWORD}运行前设置变量: export DB_PASSWORD=secretdocker-compose up (3) 扩展配置使用 extends 复用配置: services: web: extends: file: common-services.yml service: webapp
7. 注意事项· 版本兼容性:不同 Compose 版本支持的功能不同(如 version: "3.9" 对应 Docker Engine 20.10.0+)。 · 与 Docker Swarm 区别:docker-compose 适用于单机环境,生产集群建议使用 Kubernetes 或 Docker Swarm。 · 资源限制:可在配置中限制 CPU/内存: services: web: deploy: resources: limits: cpus: "0.5" memory: 512M ·
8. 实战示例:启动 WordPressversion: "3.9" services: wordpress: image: wordpress:latest ports: - "8080:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: secret depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: wordpress volumes: - mysql_data:/var/lib/mysql volumes: mysql_data: 运行: docker-compose up -d 访问 http://localhost:8080 即可初始化 WordPress。
docker-compose 是开发、测试和部署多容器应用的利器,通过声明式配置显著提升效率。建议结合 官方文档 深入学习更多功能! |