不用 Kubernetes,Docker Compose 也能实现零停机蓝绿发布
#不用 Kubernetes,Docker Compose 也能实现零停机蓝绿发布
从一次简单的
docker compose up -d,到一套可靠的生产发布流程设计。
#写在前面
Docker Compose 在中小型项目中非常常见,但直接执行 docker compose up -d时,旧容器停止、新容器启动、应用初始化和数据库迁移之间可能存在不可用窗口。
蓝绿发布通过同时维护 Blue 和 Green 两套环境,把发布过程拆成:
启动新环境 → 健康检查 → 流量切换 → 观察 → 清理旧环境。
#什么是蓝绿发布
蓝绿发布(Blue-Green Deployment)的核心:
同时维护两套运行环境,但任意时间只有一套承接线上流量。
Blue 表示当前生产环境,Green 表示待发布的新版本。
发布步骤:
- 确认当前环境;
- 启动备用环境;
- 检查健康状态;
- 切换 Nginx 流量;
- 观察业务指标;
- 保留旧版本用于回滚。
#Docker Compose 双环境设计
示例:
services:
app-blue:
image: registry.example.com/my-app
environment:
RELEASE_COLOR: blue
ports:
- "127.0.0.1:18081:8080"
app-green:
image: registry.example.com/my-app
environment:
RELEASE_COLOR: green
ports:
- "127.0.0.1:18082:8080"两个环境分别运行:
- Blue:18081
- Green:18082
#Nginx 如何切换流量
蓝绿发布真正切换的是入口,而不是容器。
切换前:
用户
|
Nginx
|
Blue :18081切换后:
用户
|
Nginx
|
Green :18082Nginx upstream:
upstream app_backend {
server 127.0.0.1:18081;
}修改为:
upstream app_backend {
server 127.0.0.1:18082;
}然后:
nginx -t
nginx -s reload#数据库迁移
蓝绿发布最大的风险来自数据库。
推荐采用 Expand-Migrate-Contract:
- Expand:新增字段、表、索引,不删除旧结构;
- Migrate:新旧版本兼容运行;
- Contract:确认稳定后清理旧逻辑。
蓝绿发布不能自动解决数据库不兼容问题。
#回滚
如果新版本异常,只需要恢复旧 upstream:
upstream app_backend {
server 127.0.0.1:18081;
}然后:
nginx -t
nginx -s reload即可恢复旧版本。
#总结
Docker Compose 配合 Nginx,同样可以实现可靠的生产发布:
启动备用环境
↓
健康检查
↓
切换流量
↓
业务验证
↓
清理旧环境核心思想:
不替换正在运行的环境,而是先准备好新的环境,再切换流量。


评论
还没有评论,来说点什么吧。