Docker Compose 是 Docker 官方的单机多容器编排工具,通过一个 docker-compose.yml 文件定义整个应用栈(前端 + 后端 + 数据库 + 缓存等),一条命令启动全部服务。它是开发环境和中小规模部署的首选方案。
一、核心概念
1.1 三个核心文件
| 文件 | 用途 |
|---|---|
docker-compose.yml | 主配置文件,定义服务、网络、Volume |
.env | 环境变量文件,Compose 自动读取 |
Dockerfile | 单个服务的镜像构建定义(可选,可用现成镜像) |
1.2 docker-compose.yml 结构
version: '3.8'
services: # 定义各个服务(容器)
web:
build: ./web # 或 image: nginx
ports:
- "3000:3000"
depends_on:
- db
- redis
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes: # 命名卷定义
postgres_data:
redis_data:
networks: # 自定义网络(可选,Compose 自动创建默认网络)
default:
driver: bridge
二、常用命令
docker-compose up -d # 后台启动所有服务
docker-compose up --build # 强制重新构建镜像
docker-compose down # 停止并删除容器和网络
docker-compose down -v # 同时删除 Volume
docker-compose ps # 查看运行状态
docker-compose logs -f web # 实时查看 web 服务日志
docker-compose exec db psql -U postgres # 进入容器执行命令
docker-compose restart # 重启所有服务
docker-compose config # 验证并显示完整配置
三、全栈示例:Next.js + Postgres + Redis
# docker-compose.yml
version: '3.8'
services:
# Next.js 前端应用
app:
build:
context: ./app
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://postgres:${DB_PASSWORD}@db:5432/myapp
REDIS_URL: redis://redis:6379
depends_on:
- db
- redis
volumes:
- ./app:/app # 开发模式:代码热重载
- /app/node_modules # 排除 node_modules(容器内版本)
# PostgreSQL 数据库
db:
image: postgres:15-alpine
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: myapp
# Redis 缓存
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
# 启动
cp .env.example .env # 创建环境变量文件
docker-compose up -d
# 执行数据库迁移
docker-compose exec app npx prisma migrate deploy
# 查看日志
docker-compose logs -f app
四、多环境配置
# docker-compose.yml(基础配置)
version: '3.8'
services:
app:
build: ./app
ports:
- "3000:3000"
environment:
NODE_ENV: ${NODE_ENV}
# docker-compose.override.yml(开发环境,自动加载)
version: '3.8'
services:
app:
volumes:
- ./app:/app
environment:
DEBUG: "true"
# docker-compose.prod.yml(生产环境)
version: '3.8'
services:
app:
restart: always
deploy:
replicas: 2
# 开发(自动加载 override)
docker-compose up -d
# 生产
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
五、健康检查与依赖
services:
db:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
# app 会等待 db healthy 后才启动(需配置条件)
app:
build: ./app
depends_on:
db:
condition: service_healthy
相关阅读
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。
「saas」更多文章
自定义域名接入 Cloudflare:CDN 加速与缓存规则配置实战
手把手讲解自定义域名接入 Cloudflare CDN 的完整流程:NS 接管、SSL/TLS 模式选择、橙云代理与灰云 DNS 的区别,并用 2024 年后的新 Cache Rules 引擎实战配置静态资源长缓存、HTML 不缓存、后台 Bypass,让边缘缓存命中率最大化。
Hugo 部署到 Cloudflare Pages 实战:从 Git 推送到全球边缘上线
详解 Cloudflare Pages 部署 Hugo 静态站的完整流程,涵盖框架预设、HUGO_VERSION 环境变量固定、构建命令、自定义域名、分支预览、_headers 缓存安全头配置及常见构建失败排查,一次推送即可全球边缘上线。
Cloudflare Workers 入门实战:在边缘运行你的第一行代码
一份面向初学者的 cloudflare workers 教程,从 V8 Isolate 运行时模型讲起,手把手演示 wrangler 初始化、路由分发、KV 存储、Cache API 缓存响应与环境变量配置,帮你在 30 分钟内部署第一个生产可用的边缘 Serverless 应用。