🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

🐳 Docker Compose - 高效管理容器化应用的利器

一、什么是 Docker Compose?

核心概念

为什么需要 Docker Compose?

二、安装 Docker Compose

📦 Linux 系统(Ubuntu/Debian)

📦 macOS 系统

📦 Windows 系统

✅ 验证安装成功

三、docker-compose.yml 文件详解

完整结构示例

核心配置项说明

四、常用命令速查表

五、实战案例

案例 1:WordPress + MySQL

案例 2:前后端分离应用

案例 3:微服务架构

六、多环境配置

使用多个 Compose 文件

配置文件示例

七、环境变量管理

.env 文件

在 compose 文件中使用

八、最佳实践

日志配置示例

九、常见问题与解决方案

十、Docker Compose V1 vs V2

十一、资源链接


根据搜索结果,我为您整理了一份完整的 Docker Compose 高效管理容器化应用指南


🐳 Docker Compose - 高效管理容器化应用的利器

一、什么是 Docker Compose?

核心概念

特性 说明
定义 Docker 官方提供的多容器应用编排工具
配置文件 docker-compose.yml(YAML 格式)
核心优势 一键启动/停止多个关联容器
适用场景 开发环境、测试环境、中小型生产环境
当前版本 Docker Compose V2(作为 Docker CLI 插件)

为什么需要 Docker Compose?

传统方式的问题

# ❌ 需要执行多条命令,容易出错
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:8
docker run --name web --link mysql -p 80:80 nginx
docker run --name redis -p 6379:6379 redis

Docker Compose 方式

# ✅ 一个文件,一条命令
# docker-compose.yml
version: '3.8'
services:
  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: "123"
    ports:
      - "3306:3306"
  web:
    image: nginx
    ports:
      - "80:80"
    depends_on:
      - mysql
  redis:
    image: redis
    ports:
      - "6379:6379"
# 一条命令启动所有服务
docker compose up -d

二、安装 Docker Compose

📦 Linux 系统(Ubuntu/Debian)

# 方法1:作为 Docker CLI 插件安装(推荐 V2 版本)
sudo apt update
sudo apt install docker-compose-plugin

# 方法2: standalone 独立安装
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
# 或
docker-compose version

📦 macOS 系统

# 使用 Homebrew 安装
brew install docker-compose

# 或使用 Docker Desktop(已包含 Compose)
# 下载:https://www.docker.com/products/docker-desktop/

📦 Windows 系统

# 推荐:安装 Docker Desktop for Windows
# 下载地址:https://www.docker.com/products/docker-desktop/
# Docker Desktop 已内置 Docker Compose

# 验证安装
docker compose version

✅ 验证安装成功

# 查看版本
docker compose version

# 输出示例
Docker Compose version v2.24.0

三、docker-compose.yml 文件详解

完整结构示例

version: '3.8'

# 服务定义
services:
  # 服务1:Web 应用
  web:
    build: .                          # 从 Dockerfile 构建
    # image: nginx:latest            # 或使用现成镜像
    container_name: my-web           # 容器名称
    ports:
      - "80:80"                      # 端口映射
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html # 挂载卷
      - nginx-logs:/var/log/nginx    # 命名卷
    environment:
      - ENV=production
      - DB_HOST=db
    env_file:
      - .env                         # 环境变量文件
    depends_on:
      - db                           # 依赖服务
      - redis
    networks:
      - app-network
    restart: unless-stopped          # 重启策略
    healthcheck:                     # 健康检查
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

  # 服务2:数据库
  db:
    image: mysql:8.0
    container_name: my-db
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: myapp
    volumes:
      - db-data:/var/lib/mysql       # 数据持久化
    networks:
      - app-network
    restart: always

  # 服务3:缓存
  redis:
    image: redis:alpine
    container_name: my-redis
    ports:
      - "6379:6379"
    networks:
      - app-network

# 网络定义
networks:
  app-network:
    driver: bridge

# 数据卷定义
volumes:
  db-data:
  nginx-logs:

核心配置项说明

配置项 说明 示例
build 从 Dockerfile 构建镜像 build: .build: ./dir
image 使用现成镜像 image: nginx:latest
container_name 自定义容器名 container_name: my-app
ports 端口映射 "8080:80"
volumes 挂载数据卷 ./data:/app/data
environment 环境变量 - KEY=value
env_file 环境变量文件 .env
depends_on 服务依赖 depends_on: [db]
networks 网络连接 app-network
restart 重启策略 always / unless-stopped
healthcheck 健康检查 见上方示例
command 覆盖默认命令 command: npm start
working_dir 工作目录 working_dir: /app

四、常用命令速查表

命令 说明 示例
启动服务 创建并启动所有容器 docker compose up
后台启动 守护进程模式运行 docker compose up -d
停止服务 停止并移除容器 docker compose down
停止保留卷 停止但保留数据卷 docker compose down -v
查看状态 显示容器运行状态 docker compose ps
查看日志 查看服务日志 docker compose logs
实时日志 跟踪日志输出 docker compose logs -f
重启服务 重启所有服务 docker compose restart
重建服务 强制重新构建 docker compose up -d --build
执行命令 在容器中执行命令 docker compose exec web bash
查看配置 验证配置文件 docker compose config
暂停服务 暂停运行中的服务 docker compose pause
恢复服务 恢复暂停的服务 docker compose unpause
拉取镜像 下载所有镜像 docker compose pull
查看拓扑 显示服务依赖关系 docker compose top

五、实战案例

案例 1:WordPress + MySQL

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp-data:/var/www/html
    depends_on:
      - db
    networks:
      - wp-network

  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_ROOT_PASSWORD: rootpassword
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - wp-network

volumes:
  wp-data:
  db-data:

networks:
  wp-network:
    driver: bridge

启动命令

docker compose up -d
# 访问 http://localhost:8080

案例 2:前后端分离应用

version: '3.8'

services:
  # 前端
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    environment:
      - REACT_APP_API_URL=http://backend:8000
    depends_on:
      - backend
    networks:
      - app-network

  # 后端
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
      - REDIS_URL=redis://redis:6379
    depends_on:
      - db
      - redis
    networks:
      - app-network

  # 数据库
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - app-network

  # 缓存
  redis:
    image: redis:alpine
    volumes:
      - redis-data:/data
    networks:
      - app-network

volumes:
  postgres-data:
  redis-data:

networks:
  app-network:
    driver: bridge

案例 3:微服务架构

version: '3.8'

services:
  # API 网关
  gateway:
    image: kong:latest
    ports:
      - "8000:8000"
      - "8443:8443"
    environment:
      - KONG_DATABASE=off
      - KONG_DECLARATIVE_CONFIG=/kong.yml
    volumes:
      - ./kong.yml:/kong.yml
    networks:
      - microservices
    depends_on:
      - user-service
      - order-service
      - product-service

  # 用户服务
  user-service:
    build: ./services/user
    environment:
      - SERVICE_PORT=8001
      - DB_HOST=user-db
    networks:
      - microservices
      - user-network

  # 订单服务
  order-service:
    build: ./services/order
    environment:
      - SERVICE_PORT=8002
    networks:
      - microservices

  # 产品服务
  product-service:
    build: ./services/product
    environment:
      - SERVICE_PORT=8003
    networks:
      - microservices

  # 用户数据库
  user-db:
    image: mongo:6
    volumes:
      - user-db-data:/data/db
    networks:
      - user-network

  # 消息队列
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "15672:15672"
    networks:
      - microservices

networks:
  microservices:
    driver: bridge
  user-network:
    driver: bridge

volumes:
  user-db-data:

六、多环境配置

使用多个 Compose 文件

# 开发环境
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d

# 生产环境
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

配置文件示例

docker-compose.dev.yml

services:
  web:
    build:
      context: .
      target: development
    volumes:
      - ./src:/app/src
    environment:
      - DEBUG=true

docker-compose.prod.yml

services:
  web:
    build:
      context: .
      target: production
    deploy:
      replicas: 3
      resources:
        limits:
          cpus: '1'
          memory: 1G
    environment:
      - DEBUG=false

七、环境变量管理

.env 文件

# .env 文件
DB_PASSWORD=secure_password
API_KEY=your_api_key
APP_ENV=production
REDIS_HOST=redis

在 compose 文件中使用

services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
  
  web:
    image: myapp
    environment:
      - API_KEY=${API_KEY}
      - ENV=${APP_ENV}

八、最佳实践

实践 说明
使用命名卷 避免数据丢失,便于管理
设置重启策略 restart: unless-stoppedalways
使用网络隔离 不同服务使用不同网络
健康检查 确保服务可用性
环境变量分离 敏感信息放入 .env 文件
版本锁定 指定镜像具体版本,不用 latest
资源限制 设置 CPU 和内存限制
日志管理 配置日志驱动和大小限制
多阶段构建 减小镜像体积
安全扫描 定期扫描镜像漏洞

日志配置示例

services:
  web:
    image: nginx
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

九、常见问题与解决方案

问题 原因 解决方案
服务启动失败 依赖服务未就绪 使用 depends_on + healthcheck
端口冲突 端口已被占用 修改端口映射或停止占用服务
数据丢失 未使用数据卷 使用 volumes 持久化数据
网络不通 服务不在同一网络 配置相同的 networks
环境变量不生效 .env 文件位置错误 确保 .env 在 compose 文件同目录
构建缓慢 未使用缓存 优化 Dockerfile,利用层缓存
内存不足 未限制资源 设置 deploy.resources.limits

十、Docker Compose V1 vs V2

特性 V1 V2
命令 docker-compose docker compose
安装方式 独立二进制文件 Docker CLI 插件
性能 较慢 更快
维护状态 已停止维护 actively maintained
推荐度 ❌ 不推荐 ✅ 推荐使用

十一、资源链接

资源 链接
🌐 官方文档 https://docs.docker.com/compose/
📥 GitHub https://github.com/docker/compose
📚 示例仓库 https://github.com/docker/awesome-compose
🔧 在线验证 https://www.compose-spec.io/

💡 提示:Docker Compose 非常适合开发、测试环境和中小型生产部署。对于大规模生产环境,建议考虑 KubernetesDocker Swarm 等更强大的编排工具。

希望这份指南能帮助您高效使用 Docker Compose 管理容器化应用!如有其他问题,欢迎继续提问。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐