使用 docker 部署我的应用程序时如何更新它

How to update my app when I deploy it using docker

我使用 docker 部署了一个 nodejs 应用程序,我不知道如何在我的 nodejs 应用程序更新后更新部署。

目前,每次更新nodejs应用程序时,我都必须删除旧的docker容器和图像。

我希望在更新 nodejs 应用程序时不需要删除旧图像和容器。

使用 docker cp 将新版本复制到您的容器,然后使用 docker restart <name>

重新启动它

您标记了这个 "production"。我这样做的标准方法是这样的:

  1. 在没有 Docker 的情况下进行本地开发。使所有单元测试都通过。在本地构建和 运行 容器并 运行 集成测试。

  2. 构建容器的 "official" 版本。用时间戳、版本号或源代码控制标记对其进行标记;但是不要:latest或分支名称或任何其他会随时间变化的名称来标记它。

  3. docker push 构建镜像到注册表。

  4. 在生产系统上,更改您的部署配置以引用您刚刚构建的版本标签。按照某种顺序,docker run 个容器(或更多)包含新图像,docker stop 个容器包含旧图像。

  5. 当一切都出错时,将您的部署配置更改回以前的版本并重新部署。 (...哎呀。)如果旧版本的图像不在本地系统上,可以从注册表中获取它们。

  6. 根据需要 docker rm 旧容器和 docker rmi 旧图像。

通常,其中大部分都可以自动化。持续集成系统可以构建软件、运行 测试并将构建的工件推送到注册表;像 Kubernetes 或 Docker Swarm 这样的集群管理器擅长在某处保留容器某个版本的一定数量的副本 运行ning 并为您管理版本升级过程。 (特别是 Kubernetes 部署将在开始关闭旧镜像之前启动新镜像的副本;Kubernetes 服务提供负载均衡器来完成这项工作。)

None 这完全是 Node 特有的。就部署系统而言,任何地方都没有 .js 文件,只有 Docker 图像。 (您不会将源文件与图像分开复制,也不会在图像内容上绑定安装源树,并且绝对不会尝试对 运行ning 容器进行实时修补。)不幸的是在第 5 步中还原,您可以 运行 在非生产环境中准确地查看失败的配置以查看问题所在。

但是,是的,从根本上说,您需要删除包含旧映像的旧容器并启动包含新映像的新容器。