Docker Compose:编排多容器应用程序 🧩

发布: (2026年1月14日 GMT+8 16:54)
4 min read
原文: Dev.to

Source: Dev.to

What is Docker Compose? 🤔

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。只需一个 YAML 文件和几条命令,就可以配置所有应用的服务,并通过一条命令启动整个堆栈。

为什么使用 Docker Compose?

  • 简洁 – 在单个文件中定义整个应用程序堆栈。
  • 可复现性 – 团队中的每个人都获得完全相同的环境。
  • 服务协同 – 容器之间的自动网络连接。
  • 环境变量 – 简单的配置管理。
  • 一键操作 – 启动、停止并重建整个应用程序堆栈。

编写 docker-compose.yml 文件

基本结构

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
  • version:指定 Compose 文件格式版本。
  • services:定义要创建的容器。
  • volumes(可选):定义命名卷。
  • networks(可选):定义自定义网络。

定义服务

每个服务代表一个容器。您可以以多种方式进行配置:

services:
  web:
    image: nginx                 # Use an existing image
    # OR
    build: ./web                 # Build from a Dockerfile
    build:                       # More build options
      context: ./web
      dockerfile: Dockerfile.dev
    ports:
      - "8080:80"                # Port mapping
    environment:                 # Environment variables
      NODE_ENV: development
    env_file: .env               # Or use an env file
    volumes:                     # Mount volumes
      - ./web:/usr/share/nginx/html
    depends_on:                  # Service dependencies
      - api
    restart: always              # Restart policy

管理应用堆栈

完整示例:带数据库和缓存的 Web 应用

version: '3'

services:
  web:
    build: ./frontend
    ports:
      - "3000:3000"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    environment:
      - REACT_APP_API_URL=http://api:5000
    depends_on:
      - api

  api:
    build: ./backend
    ports:
      - "5000:5000"
    volumes:
      - ./backend:/app
      - /app/node_modules
    environment:
      - DB_HOST=db
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis

  db:
    image: postgres:13
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=secretpassword
      - POSTGRES_USER=myuser
      - POSTGRES_DB=myapp

  redis:
    image: redis:alpine
    volumes:
      - redis-data:/data

volumes:
  postgres-data:
  redis-data:

此设置包括:

  • React 前端
  • 后端 API
  • PostgreSQL 数据库
  • Redis 缓存
  • 用于数据的持久化卷
  • 环境配置
  • 服务依赖

环境配置

在 Compose 文件中内联

services:
  web:
    environment:
      - NODE_ENV=development
      - API_URL=http://api:5000

来自 .env 文件

services:
  web:
    env_file:
      - ./web.env

来自 Shell 环境

services:
  web:
    environment:
      - NODE_ENV
      - API_KEY

对于敏感数据,建议使用已在 .gitignore 中排除的 .env 文件。

Compose 命令

构建和运行服务

# Start all services
docker-compose up

# Start in detached mode (background)
docker-compose up -d

# Build or rebuild services
docker-compose build

# Build and start
docker-compose up --build

# Stop services
docker-compose down

# Stop and remove volumes
docker-compose down -v

查看日志和状态

# View logs of all services
docker-compose logs

# Follow logs of a specific service
docker-compose logs -f web

# See running services
docker-compose ps

结论

Docker Compose 从根本上改变了我开发和部署多容器应用的方式。过去需要 dozens of commands and careful coordination(数十条命令和细致的协调)才能完成的工作,现在只需在一个文件中定义,然后用一条命令即可启动。

主要优势:

  • 与生产环境完全一致的开发环境
  • 新成员快速上手
  • 跨环境部署保持一致
  • 本地开发工作流简化

如果你在使用 Docker 并且需要管理多个容器,Compose 绝对应该成为你的工具箱的一部分。

接下来:“Docker 在生产环境:从开发到部署”

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...