Skip to content

Docker Compose 的详细使用指南,涵盖安装、核心功能及多容器应用编排示例:


1. 安装 Docker Compose

bash
# Linux 系统
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

2. 核心命令

命令作用
docker-compose up启动所有服务(后台运行加 -d
docker-compose down停止并删除所有容器、网络、卷
docker-compose build重新构建镜像
docker-compose logs查看容器日志(加服务名过滤)
docker-compose ps查看运行中的容器状态
docker-compose exec进入容器(如 exec web bash

3. 编写 docker-compose.yml

基础示例(Web + Redis)

yaml
version: '3.8'

services:
  web:
    build: ..  # 使用当前目录的 Dockerfile 构建镜像
    ports:
      - "5000:5000"
    volumes:
      - .:/code  # 挂载代码目录
    environment:
      - FLASK_ENV=development
    depends_on:
      - redis

  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data  # 持久化数据卷
    ports:
      - "6379:6379"

volumes:
  redis_data:  # 声明数据卷

4. 多服务实战(Flask + Celery + PostgreSQL)

yaml
version: '3.8'

services:
  web:
    build: .
    command: flask run --host=0.0.0.0
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db/mydb
    depends_on:
      - db
      - redis

  worker:
    build: .
    command: celery -A tasks worker --loglevel=info
    environment:
      - CELERY_BROKER_URL=redis://redis:6379/0
    depends_on:
      - redis

  db:
    image: postgres:13
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:alpine

volumes:
  postgres_data:

5. 配置详解

网络管理

yaml
services:
  web:
    networks:
      - frontend
      - backend

  db:
    networks:
      - backend

networks:
  frontend:
  backend:

健康检查

yaml
services:
  web:
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:5000/health" ]
      interval: 30s
      timeout: 10s
      retries: 3

6. 环境变量管理

使用 .env 文件

bash
# .env
DB_USER=admin
DB_PASS=secret

docker-compose.yml 中引用:

yaml
environment:
  - DB_USER=${DB_USER}
  - DB_PASS=${DB_PASS}

7. 常见问题解决

  1. 端口冲突

    • 检查 ports 配置,或使用 docker-compose down 清理旧容器。
  2. 服务启动顺序问题

    • 使用 depends_on + 健康检查确保依赖服务就绪:
      yaml
      depends_on:
        db:
          condition: service_healthy
  3. 构建缓存问题

    • 强制重新构建镜像:docker-compose build --no-cache

8. 高级技巧

扩展配置(多环境)

yaml
# docker-compose.prod.yml
services:
  web:
    environment:
      - FLASK_ENV=production
    ports:
      - "80:5000"

启动时合并配置:

bash
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

资源限制

yaml
services:
  web:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

9. 实战场景

部署 Django 应用

yaml
services:
  web:
    image: my-django-app:latest
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://user:pass@db/dbname

  db:
    image: postgres:13
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: dbname

volumes:
  pgdata:

通过 Docker Compose,可快速定义和管理多容器应用,适用于开发、测试和生产环境的服务编排。结合 CI/CD 流程可实现自动化部署。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer