使用 docker 部署我的应用程序时如何更新它
How to update my app when I deploy it using docker
我使用 docker 部署了一个 nodejs 应用程序,我不知道如何在我的 nodejs 应用程序更新后更新部署。
目前,每次更新nodejs应用程序时,我都必须删除旧的docker容器和图像。
我希望在更新 nodejs 应用程序时不需要删除旧图像和容器。
使用 docker cp
将新版本复制到您的容器,然后使用 docker restart <name>
重新启动它
您标记了这个 "production"。我这样做的标准方法是这样的:
在没有 Docker 的情况下进行本地开发。使所有单元测试都通过。在本地构建和 运行 容器并 运行 集成测试。
构建容器的 "official" 版本。用时间戳、版本号或源代码控制标记对其进行标记;但是不要用:latest
或分支名称或任何其他会随时间变化的名称来标记它。
docker push
构建镜像到注册表。
在生产系统上,更改您的部署配置以引用您刚刚构建的版本标签。按照某种顺序,docker run
个容器(或更多)包含新图像,docker stop
个容器包含旧图像。
当一切都出错时,将您的部署配置更改回以前的版本并重新部署。 (...哎呀。)如果旧版本的图像不在本地系统上,可以从注册表中获取它们。
根据需要 docker rm
旧容器和 docker rmi
旧图像。
通常,其中大部分都可以自动化。持续集成系统可以构建软件、运行 测试并将构建的工件推送到注册表;像 Kubernetes 或 Docker Swarm 这样的集群管理器擅长在某处保留容器某个版本的一定数量的副本 运行ning 并为您管理版本升级过程。 (特别是 Kubernetes 部署将在开始关闭旧镜像之前启动新镜像的副本;Kubernetes 服务提供负载均衡器来完成这项工作。)
None 这完全是 Node 特有的。就部署系统而言,任何地方都没有 .js
文件,只有 Docker 图像。 (您不会将源文件与图像分开复制,也不会在图像内容上绑定安装源树,并且绝对不会尝试对 运行ning 容器进行实时修补。)不幸的是在第 5 步中还原,您可以 运行 在非生产环境中准确地查看失败的配置以查看问题所在。
但是,是的,从根本上说,您需要删除包含旧映像的旧容器并启动包含新映像的新容器。
我使用 docker 部署了一个 nodejs 应用程序,我不知道如何在我的 nodejs 应用程序更新后更新部署。
目前,每次更新nodejs应用程序时,我都必须删除旧的docker容器和图像。
我希望在更新 nodejs 应用程序时不需要删除旧图像和容器。
使用 docker cp
将新版本复制到您的容器,然后使用 docker restart <name>
您标记了这个 "production"。我这样做的标准方法是这样的:
在没有 Docker 的情况下进行本地开发。使所有单元测试都通过。在本地构建和 运行 容器并 运行 集成测试。
构建容器的 "official" 版本。用时间戳、版本号或源代码控制标记对其进行标记;但是不要用
:latest
或分支名称或任何其他会随时间变化的名称来标记它。docker push
构建镜像到注册表。在生产系统上,更改您的部署配置以引用您刚刚构建的版本标签。按照某种顺序,
docker run
个容器(或更多)包含新图像,docker stop
个容器包含旧图像。当一切都出错时,将您的部署配置更改回以前的版本并重新部署。 (...哎呀。)如果旧版本的图像不在本地系统上,可以从注册表中获取它们。
根据需要
docker rm
旧容器和docker rmi
旧图像。
通常,其中大部分都可以自动化。持续集成系统可以构建软件、运行 测试并将构建的工件推送到注册表;像 Kubernetes 或 Docker Swarm 这样的集群管理器擅长在某处保留容器某个版本的一定数量的副本 运行ning 并为您管理版本升级过程。 (特别是 Kubernetes 部署将在开始关闭旧镜像之前启动新镜像的副本;Kubernetes 服务提供负载均衡器来完成这项工作。)
None 这完全是 Node 特有的。就部署系统而言,任何地方都没有 .js
文件,只有 Docker 图像。 (您不会将源文件与图像分开复制,也不会在图像内容上绑定安装源树,并且绝对不会尝试对 运行ning 容器进行实时修补。)不幸的是在第 5 步中还原,您可以 运行 在非生产环境中准确地查看失败的配置以查看问题所在。
但是,是的,从根本上说,您需要删除包含旧映像的旧容器并启动包含新映像的新容器。