Docker Compose 的详细使用总结、常用命令及配置示例

以下是 Docker Compose 的详细使用总结、常用命令及配置示例,帮助您快速掌握这一容器编排工具。


一、Docker Compose 核心概念

  1. 定位:用于定义和管理多容器 Docker 应用,通过 YAML 文件配置服务、网络、卷等资源。
  2. 核心概念
    • 服务 (Service):一个容器的定义(镜像、端口、环境变量等)。
    • 项目 (Project):一组关联服务的集合,默认以当前目录名命名。
  3. 核心文件docker-compose.yml(或通过 -f 指定其他文件)。

二、Docker Compose 常用命令

1. 基础操作
命令作用常用参数
docker compose up创建并启动服务-d(后台运行)、--build(强制重建镜像)
docker compose down停止并删除所有资源-v(同时删除卷)、--rmi all(删除镜像)
docker compose build构建服务镜像--no-cache(禁用缓存)
docker compose logs查看日志-f(实时跟踪)、service_name(过滤服务)
2. 管理服务
命令作用
docker compose ps查看容器状态
docker compose start启动已停止的服务
docker compose stop停止运行中的服务
docker compose restart重启服务
docker compose exec <service> <cmd>在容器内执行命令(如 exec app sh
3. 调试与扩展
命令作用
docker compose config验证配置文件语法
docker compose top显示容器内进程
docker compose pull拉取服务的最新镜像
docker compose scale web=3扩展服务实例数量(需删除 depends_on

三、docker-compose.yml 配置详解

1. 基础结构
version: '3.8'  # 推荐使用 3.8+ 版本
services:
  service1:  # 服务名称
    image: nginx:alpine  # 使用现成镜像
    # 其他配置...
  service2:
    build: .  # 基于 Dockerfile 构建镜像
    # 其他配置...
volumes:  # 声明卷
  my_volume:
networks:  # 声明网络
  my_network:
2. 完整配置示例:Web + MySQL + Redis
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
      - static_volume:/app/static
    environment:
      - DEBUG=True
    env_file:
      - .env
    depends_on:
      - db
      - redis

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: app_db
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:  # 健康检查
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 3s
      retries: 5

  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data
    command: redis-server --requirepass yourpassword

volumes:
  static_volume:
  mysql_data:
  redis_data:

四、关键配置项说明

1. 服务配置
  • build:构建镜像(优先于 image
    build:
      context: ./dir  # Dockerfile 所在目录
      dockerfile: Dockerfile.prod
      args:  # 构建参数
        APP_VERSION: 1.0
    
  • ports:端口映射
    ports:
      - "80:80"         # 宿主机:容器
      - "443:443/tcp"   # 指定协议
      - "3000-3005:3000-3005"  # 范围映射
    
  • volumes:数据卷
    volumes:
      - /host/path:/container/path  # 绑定挂载
      - named_volume:/container/path  # 命名卷
      - config_file.conf:/app/config.conf:ro  # 只读挂载
    
2. 环境管理
  • environment:直接定义变量
    environment:
      - DB_HOST=db
      - DB_PORT=3306
    
  • env_file:从文件加载变量
    env_file:
      - .env
      - dev.env
    
3. 依赖与健康检查
  • depends_on:控制启动顺序
    depends_on:
      - db
      - redis
    
  • healthcheck:定义健康检查
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
    
4. 网络配置
services:
  frontend:
    networks:
      - frontend
  backend:
    networks:
      - frontend
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

五、进阶使用技巧

1. 多环境配置
  • 开发环境:挂载代码目录,启用调试模式
  • 生产环境:使用构建好的镜像,限制资源
    # 合并多个配置文件
    docker compose -f docker-compose.yml -f docker-compose.prod.yml up
    
2. 资源限制
deploy:  # 需 Swarm 模式
  resources:
    limits:
      cpus: '0.5'
      memory: 512M
    reservations:
      memory: 256M
3. 扩展服务
# 启动 3 个 web 实例
docker compose up -d --scale web=3

六、常见问题与解决

  1. 容器启动顺序问题

    • 使用 depends_on + healthcheck 确保依赖服务真正可用。
  2. 端口冲突

    • 检查宿主机端口占用,或让 Docker 自动分配端口:
      ports:
        - "3000"  # 容器 3000 端口映射到宿主机随机端口
      
  3. 数据持久化

    • 始终使用命名卷(named volume)保存数据库等关键数据。

通过合理配置 docker-compose.yml,您可以快速部署复杂的多容器应用。建议结合具体需求逐步完善配置,并善用 docker compose config 验证文件语法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值