docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker Compose使用

Docker Compose从入门到实践的完全指南

作者:aiweker

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过一个 YAML 文件来配置应用的服务,只需简单命令就能创建和启动所有服务,下面就跟随小编一起来看看它的具体使用吧

1. Docker Compose 简介与核心价值

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用的服务,只需简单命令就能创建和启动所有服务。

核心优势:

典型应用场景:

2. Compose 文件结构与版本

2.1 基本文件结构

version: "3.8"  # 指定Compose文件格式版本

services:  # 容器服务定义
  webapp:
    image: nginx:alpine
    ports:
      - "80:80"

  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example

volumes:  # 持久化卷定义
  db-data:

版本选择建议:

2.2 版本演进对比

特性2.x 系列3.x 系列
Swarm 模式支持有限支持完整支持
GPU 支持不支持3.7+ 支持
扩展字段不支持3.4+ 支持
服务依赖depends_on 基本增强的健康检查依赖

3. 核心服务配置详解

3.1 镜像与构建

使用现有镜像:

services:
  redis:
    image: redis:6.2-alpine

基于 Dockerfile 构建:

services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile.dev
      args:
        NODE_ENV: development
    image: my-webapp:1.0

参数说明:

3.2 端口映射

services:
  web:
    ports:
      - "80:80"           # 主机端口:容器端口
      - "443:443/tcp"      # 指定协议
      - "3000-3005:3000-3005"  # 端口范围
      - "9090"            # 仅暴露容器端口

最佳实践:

3.3 环境变量配置

.env 文件:

DB_USER=admin
DB_PASS=secret

Compose 文件引用:

services:
  db:
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    env_file:
      - ./db.env

优先级规则:

3.4 数据持久化

services:
  database:
    volumes:
      - db-data:/var/lib/postgresql/data
      - ./logs:/app/logs

volumes:
  db-data:
    driver: local

挂载类型对比:

4. 网络配置策略

4.1 默认网络行为

services:
  web:
    networks:
      - frontend
  api:
    networks:
      - frontend
      - backend

networks:
  frontend:
  backend:
    driver: bridge

自动生成规则:

4.2 自定义网络配置

networks:
  app-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
          gateway: 172.20.0.1
    attachable: true

高级选项:

5. 服务依赖与健康检查

5.1 依赖控制

services:
  web:
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

  db:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 3s
      retries: 5

依赖条件类型:

5.2 健康检查配置

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 5s

检查方式:

6. 常用命令实战

6.1 基础命令

# 启动所有服务(后台模式)
docker-compose up -d

# 查看运行状态
docker-compose ps

# 停止服务
docker-compose stop

# 停止并删除容器
docker-compose down

# 重建服务
docker-compose up -d --build

6.2 调试命令

# 查看服务日志
docker-compose logs -f web

​​​​​​​# 执行一次性命令
docker-compose run --rm web python manage.py migrate

# 进入运行中容器
docker-compose exec db psql -U postgres

6.3 扩展操作

# 水平扩展服务实例
docker-compose up -d --scale web=3
# 查看服务资源使用
docker-compose top

# 验证配置文件
docker-compose config

7. 生产环境最佳实践

7.1 安全配置

services:
  db:
    read_only: true
    tmpfs: /run
    security_opt:
      - no-new-privileges:true
    user: "1000:1000"

安全建议:

7.2 资源约束

services:
  worker:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          memory: 256M
    restart_policy:
      condition: on-failure
      max_attempts: 3

关键配置:

7.3 多环境配置

base.yml:

services:
  app:
    image: my-app
    env_file: .env

override.yml:

services:
  app:
    environment:
      DEBUG: "true"
    ports:
      - "8080:80"

启动命令:

docker-compose -f base.yml -f override.yml up

8. 完整示例分析

微服务应用示例

version: "3.8"

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - api
    networks:
      - app-net

  api:
    build: ./backend
    environment:
      DB_URL: postgres://user:pass@db:5432/app
    volumes:
      - ./backend:/app
    networks:
      - app-net
      - db-net

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: pass
      POSTGRES_USER: user
      POSTGRES_DB: app
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - db-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d app"]
      interval: 5s

networks:
  app-net:
  db-net:
    internal: true

volumes:
  db-data:

架构特点:

9. 总结与进阶建议

9.1 核心要点回顾

编排能力:Compose 简化了多容器应用的管理

声明式配置:YAML 文件定义完整应用栈

环境一致性:实现开发-测试-生产环境一致

资源控制:精确管理服务资源分配

服务发现:内置 DNS 解析简化服务通信

9.2 进阶学习建议

与 Swarm/K8s 集成:

docker stack deploy -c compose.yml myapp

使用扩展字段:

x-logging: &default-logging
  options:
    max-size: "10m"
    max-file: "3"

性能调优:

监控方案:

services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"

通过掌握 Docker Compose,您已经具备了高效管理容器化应用的能力。建议从简单项目开始实践,逐步应用到复杂生产环境,最终实现基础设施即代码的现代化运维模式。

到此这篇关于Docker Compose从入门到实践的完全指南的文章就介绍到这了,更多相关Docker Compose使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文