Docker Compose 完全指南:从入门到实战部署

  • 时间:2025-10-30 15:52 作者: 来源: 阅读:3
  • 扫一扫,手机访问
摘要:C Docker Compose 完全指南:从入门到实战部署前言在现代应用开发中,微服务架构已成为主流,一个应用往往由多个相互关联的服务组成。手动管理这些服务的启动、停止和互联变得异常复杂。Docker Compose 应运而生,它通过一个简单的 YAML 文件就能定义和运行多容器 Docker 应用,极大地简化了容器化应用的管理工作。C 一、Docker

C Docker Compose 完全指南:从入门到实战部署

前言

在现代应用开发中,微服务架构已成为主流,一个应用往往由多个相互关联的服务组成。手动管理这些服务的启动、停止和互联变得异常复杂。Docker Compose 应运而生,它通过一个简单的 YAML 文件就能定义和运行多容器 Docker 应用,极大地简化了容器化应用的管理工作。

C 一、Docker Compose 是什么?

1.1 核心概念

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您使用一个单独的 YAML 文件来配置应用的所有服务,然后通过一条命令就能创建并启动所有服务。

1.2 与原生 Docker 的区别

#技术分享| 特性 | Docker CLI | Docker Compose | | ---

| 单容器管理 | ✅ 优秀 | ⚠️ 支持但非主要用途 | | 多容器管理 | ❌ 复杂,需要脚本 | ✅ 优秀,原生支持 | | 配置方式 | 命令行参数 | YAML 声明式文件 | | 依赖管理 | 手动处理 | 自动处理服务依赖 | | 环境复现 | 困难 | 简单且一致 |

C 二、安装 Docker Compose

2.1 在不同系统上的安装

Linux 系统安装

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

Windows/macOS 安装 :Docker Desktop 已经包含了 Docker Compose,无需单独安装。

docker compose version

2.2 升级 Docker Compose

docker-compose --version

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

C 三、为什么要使用 Docker Compose?

3.1 解决的主要痛点

  1. 简化多容器管理 :一条命令管理所有服务

  2. 环境一致性 :确保开发、测试、生产环境一致

  3. 快速搭建开发环境 :新成员只需一条命令即可获得完整环境

  4. 服务依赖管理 :自动处理服务启动顺序

  5. 配置即代码 :版本控制所有环境配置

3.2 适用场景

  • 本地开发环境搭建

  • 自动化测试环境

  • 单主机小型部署

  • CI/CD 流水线中的测试阶段

  • 演示和教学环境

C 四、Docker Compose 核心概念

4.1 核心组件

  1. Service :一个容器化的应用/服务

  2. Project :由多个服务组成的完整应用

  3. Compose File :定义服务、网络、卷的 YAML 文件

4.2 文件结构

典型的 Docker Compose 项目结构:

my-app/
├── docker-compose.yml    # 主配置文件├── .env # 环境变量文件├── backend/ # 后端服务目录│ ├── Dockerfile │ └── src/ ├── frontend/ # 前端服务目录│ ├── Dockerfile │ └── src/ └── database/ # 数据库初始化脚本└── init.sql

C 五、Docker Compose 文件语法详解

5.1 文件版本和结构

version: '3.8'services: web: build: . ports: - "5000:5000"redis: image: "redis:alpine"networks: app-network: driver: bridgevolumes: db-data: driver: local

5.2 常用配置指令详解

基本配置

services:  webapp:    image: nginx:latest    container_name: my-nginx    restart: unless-stopped    depends_on:
      - db
      - redis

构建配置

services:  app:    build:      context: ./dir      dockerfile: Dockerfile      args:        buildno: 1        user: someuser

网络配置

services:  web:    networks:
      - frontend
      - backendnetworks: frontend: driver: bridge ipam: config: - subnet: 172.16.238.0/24 backend: driver: bridge

数据卷配置

services:  db:    volumes:
      - db-data:/var/lib/mysql
      - ./logs:/app/logs
      - /etc/localtime:/etc/localtime:rovolumes: db-data: driver: local driver_opts: type: nfs o: addr=192.168.1.1,rw device: ":/path/to/nfs"

环境变量配置

services:
  web:    environment:      - DATABASE_HOST=db      - REDIS_HOST=redis      - DEBUG=false    env_file:      - ./common.env      - ./apps/web.env

C 六、Docker Compose 常用命令

6.1 基本操作命令

docker-compose up -d

docker-compose up -d web redis

docker-compose down

docker-compose ps

docker-compose logs docker-compose logs -f web

docker-compose restart web

docker-compose pause web docker-compose unpause web

6.2 调试和维护命令

docker-compose exec web bash
docker-compose exec db mysql -u root -p

docker-compose run --rm web python manage.py migratedocker-compose configdocker-compose images

docker-compose build --no-cachedocker-compose up --scale web=3 --scale worker=2

七、实战案例:部署 WordPress 网站

7.1 项目结构

wordpress-site/
├── docker-compose.yml
├── .env
├── mysql/
│   └── init.sql
└── wordpress/
    └── wp-config.php

7.2 Docker Compose 配置文件

version: '3.8'services: db: image: mysql:8.0 container_name: wordpress_db restart: always environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - db_data:/var/lib/mysql - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - wordpress_network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 30s timeout: 10s retries: 5

wordpress: image: wordpress:6.3 container_name: wordpress_app restart: always depends_on: db: condition: service_healthy environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: ${DB_USER} WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} WORDPRESS_DB_NAME: ${DB_NAME} volumes: - wp_data:/var/www/html - ./wordpress/wp-config.php:/var/www/html/wp-config.php ports: - "80:80" networks: - wordpress_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80"] interval: 30s timeout: 10s retries: 5

phpmyadmin: image: phpmyadmin:latest container_name: wordpress_phpmyadmin restart: always depends_on: - db environment: PMA_HOST: db PMA_PORT: 3306 PMA_USER: ${DB_USER} PMA_PASSWORD: ${DB_PASSWORD} ports: - "8080:80" networks: - wordpress_network

volumes: db_data: driver: local wp_data: driver: localnetworks: wordpress_network: driver: bridge ipam: config: - subnet: 172.20.0.0/16

7.3 环境变量文件 (.env)

# 数据库配置DB_ROOT_PASSWORD=secure_root_password_123 DB_NAME=wordpress_db DB_USER=wordpress_user DB_PASSWORD=secure_password_456# WordPress 配置WP_DEBUG=false WP_HOME=http://localhost

7.4 部署和操作

cd wordpress-site

docker-compose up -d

docker-compose ps

docker-compose logs -f

docker-compose down

docker-compose down -v

docker run --rm -v wordpress-site_db_data:/source -v $(pwd):/backup alpine tar czf /backup/db-backup-$(date +%Y%m%d).tar.gz -C /source .

docker-compose up -d --scale wordpress=3

八、实战案例:部署微服务应用

8.1 复杂的微服务架构

version: '3.8'x-common-variables: &common-variables SPRING_PROFILES_ACTIVE: docker EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE: http://discovery:8761/eurekaservices: discovery: image: springcloud/eureka-server:latest container_name: eureka-discovery ports: - "8761:8761" networks: - microservices-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8761"] interval: 30sgateway: build: ./api-gateway container_name: api-gateway ports: - "8080:8080" environment: <<: *common-variables depends_on: - discovery networks: - microservices-net restart: on-failureuser-service: build: ./user-service container_name: user-service environment: <<: *common-variables DATABASE_URL: jdbc:postgresql://user-db:5432/userdb depends_on: - discovery - user-db networks: - microservices-net deploy: replicas: 2order-service: build: ./order-service container_name: order-service environment: <<: *common-variables DATABASE_URL: jdbc:postgresql://order-db:5432/orderdb depends_on: - discovery - order-db networks: - microservices-netuser-db: image: postgres:13 container_name: user-database environment: POSTGRES_DB: userdb POSTGRES_USER: user POSTGRES_PASSWORD: password123 volumes: - user-data:/var/lib/postgresql/data - ./init/user-db-init.sql:/docker-entrypoint-initdb.d/init.sql networks: - microservices-netorder-db: image: postgres:13 container_name: order-database environment: POSTGRES_DB: orderdb POSTGRES_USER: order POSTGRES_PASSWORD: password123 volumes: - order-data:/var/lib/postgresql/data networks: - microservices-netzipkin: image: openzipkin/zipkin:latest container_name: zipkin ports: - "9411:9411" networks: - microservices-netadminer: image: adminer:latest container_name: adminer ports: - "8081:8080" networks: - microservices-netvolumes: user-data: driver: local order-data: driver: localnetworks: microservices-net: driver: bridge ipam: config: - subnet: 172.25.0.0/16

8.2 操作和管理微服务

docker-compose up -d --builddocker-compose up -d --build gateway user-servicedocker-compose logs -f gateway

docker-compose up -d --scale user-service=3docker-compose run --rm user-service ./migrate.shdocker-compose ps docker-compose top

docker-compose exec user-service bash

docker-compose build user-service docker-compose up -d --no-deps user-service

九、最佳实践和高级技巧

9.1 配置文件优化

使用多个 Compose 文件

docker-compose.ymldocker-compose.override.ymldocker-compose.prod.ymldocker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

环境特定的配置

version: '3.8'services: web: volumes: - ./src:/app/src ports: - "9229:9229" environment: - NODE_ENV=development - DEBUG=truedb: ports: - "5432:5432"

9.2 性能和资源管理

services:  web:    deploy:      resources:        limits:          cpus: '0.50'          memory: 512M        reservations:          cpus: '0.25'          memory: 256Mhealthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s

9.3 安全最佳实践

services:  database:    read_only: true    security_opt:
      - no-new-privileges:true    tmpfs:
      - /tmp:rw,size:64Mapp: user: "1000:1000" cap_drop: - ALL cap_add: - NET_BIND_SERVICE

十、常见问题排查

10.1 网络连接问题

docker-compose network ls

docker-compose exec web nslookup database

docker-compose port web 80

10.2 服务启动失败

docker-compose logs --tail=100 webdocker-compose up -d --force-recreate webdocker-compose config --services

10.3 资源冲突处理

docker-compose downsudo lsof -i :8080docker-compose down -v docker volume prune

总结

Docker Compose 是一个极其强劲的工具,它通过声明式的 YAML 配置文件简化了多容器应用的管理。通过本文的学习,你应该能够:

  1. 理解 Docker Compose 的核心概念 和价值主张

  2. 掌握 Compose 文件的语法和结构 ,能够编写复杂的配置

  3. 使用各种 Compose 命令 来管理应用生命周期

  4. 部署实际项目 ,如 WordPress 和微服务架构

  5. 遵循最佳实践 ,确保配置的可维护性和安全性

记住,Docker Compose 特别适合开发、测试和单机部署场景。对于生产环境的多机部署,提议思考 Docker Swarm 或 Kubernetes 等编排工具。

通过不断实践和探索,你将能够充分利用 Docker Compose 的强劲功能,显著提高开发效率和部署可靠性。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】Spring Boot3 中实现按模板导出 Word 文档合同的技术指南(2025-10-30 16:04)
【系统环境|】openPangu-Ultra-MoE-718B-V1.1今日正式开源,部署指南来啦!(2025-10-30 16:03)
【系统环境|】Ubuntu + vLLM + DeepSeek 本地部署完全指南(2025-10-30 16:03)
【系统环境|】如何用公众号AI编辑器实现一键排版?一份完整的5步指南(2025-10-30 16:02)
【系统环境|】Spring Boot 与 Nacos 完美整合指南(2025-10-30 16:01)
【系统环境|】Rust MCP开发指南:让AI与应用对话的桥梁(2025-10-30 16:00)
【系统环境|】MCP Server 开发实战指南(2025-10-30 15:59)
【系统环境|】入门指南:使用 Playwright MCP Server 为你的 AI Agent 赋予能力(2025-10-30 15:58)
【系统环境|】一个IT女搬砖工的情人节爱心礼物指南及衍伸 v16.02.14(2025-10-30 15:57)
【系统环境|】百元矿渣显卡淘金全指南(2025-10-30 15:57)
手机二维码手机访问领取大礼包
返回顶部