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

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

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

最佳答案

您标记了此“作品”。我这样做的标准方法是这样的:

  • 不使用Docker在本地进行开发。通过所有单元测试。在本地构建和运行容器并运行集成测试。
  • 构建容器的“正式”版本。给它加上时间戳,版本号或源代码控制标签;但请勿使用:latest或分支名称或随时间变化的其他任何方式对其进行标记。
  • docker push将生成的图像编码到注册表。
  • 在生产系统上,更改部署配置以引用刚刚构建的版本标记。按照某种顺序,用新图像docker run一个或多个容器,并用旧图像docker stop一个或多个容器。
  • 如果全部出错,请将部署配置更改回先前的版本并重新部署。 (...糟糕。)如果镜像的旧版本仍不在本地系统上,则可以从注册表中获取它们。
  • 根据需要docker rm旧容器和docker rmi旧图像。

  • 通常,其中大部分可以自动化。持续集成系统可以构建软件,运行测试并将构建的 Artifact 推送到注册表。诸如Kubernetes或Docker Swarm之类的集群管理器擅长在某个地方运行某个容器的某个版本的一些副本,并为您管理版本升级过程。 (特别是,Kubernetes部署将在开始关闭旧镜像之前先启动新镜像的副本; Kubernetes Services提供了负载均衡器来完成这项工作。)

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

    但是,是的,从根本上讲,您需要删除带有旧镜像的旧容器,并使用新镜像启动一个新容器。

    关于docker - 使用Docker部署应用程序时如何更新我的应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55833754/

    10-14 17:03
    查看更多