🎬 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-stopped 或 always
✅ 使用网络隔离不同服务使用不同网络
✅ 健康检查确保服务可用性
✅ 环境变量分离敏感信息放入 .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

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

十一、资源链接

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

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

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

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

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

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

Logo

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

更多推荐