Docker Compose 入门教程

发布于:2025-08-16 ⋅ 阅读:(16) ⋅ 点赞:(0)
一、Docker Compose 简介

Docker Compose 是 Docker 官方提供的多容器编排工具,通过 YAML 文件(docker-compose.yml)定义应用程序的服务、网络和卷,实现一键式容器管理。其核心优势包括:

  • 简化多容器管理:通过单一文件管理多个关联容器。
  • 开发环境标准化:团队共享相同的环境配置。
  • 快速环境搭建:一条命令启动复杂应用栈。
  • 服务依赖管理:自动处理服务间的依赖关系。
  • 配置即代码:版本控制环境配置。
二、安装 Docker Compose
  1. 前置条件

    • 已安装 Docker Engine(版本需与 Compose 兼容)。
    • Linux 系统建议配置镜像加速器(如阿里云、清华源)。
  2. 安装步骤

    • Linux/macOS
      # 下载最新版二进制文件(替换版本号)
      sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      # 添加执行权限
      sudo chmod +x /usr/local/bin/docker-compose
      # 验证安装
      docker-compose --version
      
    • Windows:通过 Docker Desktop 内置安装(需启用 WSL2 或 Hyper-V)。
三、核心概念与文件结构
  1. docker-compose.yml 文件结构

    version: '3.8'  # 指定 Compose 版本
    services:       # 容器服务定义
      web:          # 服务名称
        image: nginx:latest  # 使用官方镜像
        ports:
          - "80:80"         # 端口映射(宿主机:容器)
        volumes:
          - ./html:/usr/share/nginx/html  # 挂载数据卷
        depends_on:
          - db               # 依赖其他服务
        networks:
          - custom_network    # 使用自定义网络
      db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: 123456  # 环境变量
        networks:
          - custom_network
    networks:
      custom_network:
        driver: bridge  # 使用 bridge 网络驱动
        ipam:
          config:
            - subnet: 172.16.238.0/24  # 指定子网范围
    
  2. 核心配置字段

    • 服务字段(services):定义容器配置,如镜像、端口、卷等。
    • 网络与存储配置(networks/volumes):管理容器间的网络和数据持久化。
四、环境变量管理
  1. .env 文件

    • 集中管理环境变量,使配置与代码分离。
    • 文件格式为键值对(每行一个变量,不支持多行值):
      # .env 文件示例
      DB_PASSWORD=mysecret
      WEB_PORT=8080
      ENVIRONMENT=dev
      
  2. docker-compose.yml 中引用变量

    • 使用 ${变量名}${变量名:-默认值}(若变量未定义,使用默认值)。
    • 示例:
      version: "3.8"
      services:
        db:
          image: mysql:${MYSQL_VERSION:-5.7}
          environment:
            MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
        web:
          image: nginx
          ports:
            - "${WEB_PORT}:80"
      
  3. 多环境配置切换

    • 开发环境.env.dev):
      ENVIRONMENT=dev
      WEB_PORT=8080
      
    • 生产环境.env.prod):
      ENVIRONMENT=prod
      WEB_PORT=80
      
    • 启动时指定环境文件:
      docker-compose --env-file .env.prod up
      
五、常用命令实战
  1. 基础命令

    • 启动所有服务(后台模式):
      docker-compose up -d
      
    • 查看运行状态:
      docker-compose ps
      
    • 停止服务:
      docker-compose stop
      
    • 停止并删除容器:
      docker-compose down
      
    • 重建服务:
      docker-compose up -d --build
      
  2. 调试命令

    • 查看服务日志:
      docker-compose logs -f web
      
    • 执行一次性命令:
      docker-compose run --rm web python manage.py migrate
      
    • 进入运行中容器:
      docker-compose exec db psql -U postgres
      
  3. 扩展操作

    • 水平扩展服务实例:
      docker-compose up -d --scale web=3
      
    • 查看服务资源使用:
      docker-compose top
      
    • 验证配置文件:
      docker-compose config
      
六、进阶技巧与最佳实践
  1. YAML 语法规范

    • 使用空格缩进(禁止 Tab),键值对冒号后加空格。
    • 数字/特殊字符环境变量需用引号包裹(如 "8080:80")。
  2. 性能优化

    • 使用 restart: unless-stopped 实现容器自动重启。
    • 通过 deploy/resource/limits 限制 CPU/内存。
  3. 多环境配置

    • 使用 .env 文件管理环境变量。
    • 分环境编写多个 Compose 文件(如 docker-compose.prod.yml)。
  4. 多机管理部署

    • Docker Swarm:使用 docker swarm 进行多机部署。
    • Kubernetes:结合 Kompose 工具将 Compose 文件转换为 Kubernetes 配置。