多容器编排、网络配置、数据卷管理与生产部署
Docker Compose是定义和运行多容器Docker应用的工具。通过一个YAML配置文件,你可以同时管理多个服务(Web服务器、数据库、缓存等),一键启动完整的开发或生产环境。对于需要多个服务协作的应用(如Web应用+数据库+Redis),Docker Compose是最高效的管理方式。本指南将帮助你从零掌握Docker Compose的核心用法。
| 概念 | 说明 |
|---|---|
| Service(服务) | 一个容器定义,包含镜像、端口、环境变量等配置 |
| Network(网络) | 容器间的通信网络,默认创建bridge网络 |
| Volume(卷) | 数据持久化存储,容器删除后数据不丢失 |
| Project(项目) | 一组关联的服务,通常对应一个docker-compose.yml |
# 安装Docker Compose V2(作为Docker插件)
# Docker Desktop自带,Linux安装:
sudo apt install docker-compose-plugin
# 验证安装
docker compose version
# docker-compose.yml
version: '3.8'
services:
# Web应用
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
- REDIS_URL=redis://cache:6379
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
volumes:
- .:/app
- /app/node_modules
restart: unless-stopped
# PostgreSQL数据库
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: myapp
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d myapp"]
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
# Redis缓存
cache:
image: redis:7-alpine
volumes:
- redis_data:/data
ports:
- "6379:6379"
restart: unless-stopped
volumes:
postgres_data:
redis_data:
# 启动所有服务(后台运行)
docker compose up -d
# 启动并强制重新构建
docker compose up -d --build
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f web
docker compose logs --tail=100
# 停止所有服务
docker compose down
# 停止并删除数据卷
docker compose down -v
# 重启单个服务
docker compose restart web
# 进入容器
docker compose exec web sh
# 查看服务配置
docker compose config
Docker Compose默认为每个项目创建一个bridge网络,同网络内的容器可以通过服务名互相访问。
# 自定义网络
services:
frontend:
networks:
- frontnet
backend:
networks:
- frontnet
- backnet
database:
networks:
- backnet
networks:
frontnet:
driver: bridge
backnet:
driver: bridge
internal: true # 不允许外部访问
# 命名卷(推荐用于数据库)
volumes:
postgres_data:
# 绑定挂载(适合开发时代码同步)
services:
web:
volumes:
- ./src:/app/src # 宿主机到容器
- /app/node_modules # 匿名卷(防止覆盖)
# 只读挂载
services:
web:
volumes:
- ./config:/app/config:ro
# 查看卷列表
docker volume ls
docker volume inspect project_postgres_data
# .env文件
DB_USER=admin
DB_PASSWORD=secret123
REDIS_HOST=cache
# docker-compose.yml中引用
services:
db:
image: postgres:16
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
# 多环境配置
# docker-compose.override.yml(开发环境)
services:
web:
volumes:
- .:/app
# 使用:docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# 生产级配置示例
services:
web:
image: myapp:1.2.0
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
memory: 256M
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
restart: unless-stopped
访问 ToolSnap 获取YAML格式化、JSON处理等在线工具,提升开发效率。
Docker用于管理单个容器(docker run),Docker Compose用于定义和管理多容器应用。通过docker-compose.yml文件声明服务、网络和卷,一条命令启动整个应用栈。
通过volumes配置实现。可以使用命名卷由Docker管理存储位置,或绑定挂载将宿主机目录映射到容器内。数据库等需要持久化的服务必须配置volume。
docker compose是Docker Compose V2(作为Docker CLI插件),docker-compose是V1(独立安装的Python工具)。V2是推荐版本,功能更强且集成度更高。