我已使用docker部署了一个nodejs应用程序,我不知道在更新我的nodejs应用程序后如何更新部署。
当前,每次更新nodejs应用时,我都必须删除旧的docker容器和映像。
我希望在我更新nodejs应用时不需要删除旧的图像和容器。
答案 0 :(得分:1)
使用Enum
将新版本复制到您的容器中,然后使用docker cp
重新启动它
答案 1 :(得分:1)
您标记了此“作品”。我执行此操作的标准方式如下:
无需Docker即可进行本地开发。通过所有单元测试。在本地构建和运行容器并运行集成测试。
构建容器的“官方”版本。用时间戳,版本号或源代码控制标签对其进行标记;但是不用.html
或分支名称或随时间变化的其他任何方式对其进行标记。
:latest
生成的映像到注册表。
在生产系统上,更改部署配置以引用刚刚构建的版本标记。按照某种顺序,docker push
一个带有新图像的容器(或更多个容器),docker run
一个带有旧图像的容器。
万一出现问题,请将部署配置更改回以前的版本并重新部署。 (...哎呀。)如果旧版本的映像仍不在本地系统上,则可以从注册表中获取它们。
根据需要docker stop
个旧容器和docker rm
个旧图像。
通常,其中很多可以自动化。持续集成系统可以构建软件,运行测试并将构建的工件推送到注册表。诸如Kubernetes或Docker Swarm之类的集群管理器擅长在某个地方运行某个容器的某个版本的一些副本,并为您管理版本升级过程。 (特别是,Kubernetes部署将在开始关闭旧映像之前先启动新映像的副本; Kubernetes Services提供了负载均衡器来完成这项工作。)
这些都不是特定于Node的。就部署系统而言,在任何地方都没有docker rmi
文件,只有Docker映像。 (不要将源文件与映像分开复制,也不要在映像内容上绑定安装源树,并且绝对不要尝试对正在运行的容器进行实时修补。)不幸的是,在步骤5中还原后,您可以在非生产环境中准确运行失败的配置,以查看出了什么问题。
但是,是的,从根本上讲,您需要删除带有旧映像的旧容器,并使用新映像启动新容器。