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 在生产环境:从开发到部署”