6月2日 23:45
Docker 容器怎么更新?滚动更新、蓝绿部署和回滚策略
Docker 容器是不可变的——更新不是在容器里改代码,而是用新镜像替换旧容器。关键是怎么替换才能不停服。
最简单的更新:停旧启新
有停机时间。适合内部工具、非关键服务。停机时间取决于镜像拉取速度和启动时间。
滚动更新:Docker Swarm
Swarm 的滚动更新逐个替换容器,始终保持部分实例在线:
更新过程中部分容器跑 v1,部分跑 v2,用户无感知。如果新版本有问题,回滚:
蓝绿部署
准备两套环境(蓝和绿),切换流量:
蓝绿部署零停机,但需要双倍资源。适合关键服务的版本更新。
Docker Compose 更新
Compose 会检测镜像是否变化,只重建有变更的容器。但不是滚动更新——旧容器先停再启新容器,有短暂停机。
健康检查确保更新安全
更新后容器必须通过健康检查才算成功。连续失败 3 次,标记为 unhealthy。配合滚动更新,unhealthy 的新容器不会继续替换旧容器。
回滚策略
不管用什么更新方式,都要有回滚能力:
- 保留旧版本镜像(不要 docker rmi 删掉)
- 数据库变更要向后兼容(新版本能读旧 schema)
- 配置文件版本化管理(.env 用 git 追踪)
回滚就是 docker run 旧版本镜像。如果数据库迁移了且不兼容旧版本,回滚也救不了——所以数据库变更要分步做。