不用 Kubernetes,Docker Compose 也能实现零停机蓝绿发布

发布于 更新于 465 字 2 分钟阅读

#不用 Kubernetes,Docker Compose 也能实现零停机蓝绿发布

从一次简单的 docker compose up -d,到一套可靠的生产发布流程设计。

#写在前面

Docker Compose 在中小型项目中非常常见,但直接执行 docker compose up -d时,旧容器停止、新容器启动、应用初始化和数据库迁移之间可能存在不可用窗口。

蓝绿发布通过同时维护 Blue 和 Green 两套环境,把发布过程拆成:

启动新环境 → 健康检查 → 流量切换 → 观察 → 清理旧环境。

image

#什么是蓝绿发布

蓝绿发布(Blue-Green Deployment)的核心:

同时维护两套运行环境,但任意时间只有一套承接线上流量。

Blue 表示当前生产环境,Green 表示待发布的新版本。

发布步骤:

  1. 确认当前环境;
  2. 启动备用环境;
  3. 检查健康状态;
  4. 切换 Nginx 流量;
  5. 观察业务指标;
  6. 保留旧版本用于回滚。

#Docker Compose 双环境设计

示例:

Text
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 如何切换流量

蓝绿发布真正切换的是入口,而不是容器。

切换前:

Text
用户
 |
Nginx
 |
Blue :18081

切换后:

Text
用户
 |
Nginx
 |
Green :18082

Nginx upstream:

Text
upstream app_backend {
    server 127.0.0.1:18081;
}

修改为:

Text
upstream app_backend {
    server 127.0.0.1:18082;
}

然后:

Text
nginx -t
nginx -s reload

image

#数据库迁移

蓝绿发布最大的风险来自数据库。

推荐采用 Expand-Migrate-Contract:

  1. Expand:新增字段、表、索引,不删除旧结构;
  2. Migrate:新旧版本兼容运行;
  3. Contract:确认稳定后清理旧逻辑。

蓝绿发布不能自动解决数据库不兼容问题。

#回滚

如果新版本异常,只需要恢复旧 upstream:

Text
upstream app_backend {
    server 127.0.0.1:18081;
}

然后:

Text
nginx -t
nginx -s reload

即可恢复旧版本。

#总结

Docker Compose 配合 Nginx,同样可以实现可靠的生产发布:

Text
启动备用环境
        ↓
健康检查
        ↓
切换流量
        ↓
业务验证
        ↓
清理旧环境

核心思想:

不替换正在运行的环境,而是先准备好新的环境,再切换流量。

zxb的博客

评论

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

评论经发布者审核后公开
46 篇文档

文档树

8 个章节

本文目录

搜索文档

输入关键词,立即搜索当前分享。