部署 Web 应用程序时是否应该重新创建容器?
Should you recreate containers when deploying web app?
我想弄清楚最佳实践是否会规定在部署我的网络应用程序的新版本时(nodejs 运行 在它自己的容器中)我应该:
- 从容器内部执行
git pull
并更新 "in place";或者
- 使用新代码创建一个新容器并执行两个 docker 容器的热交换
我可能遗漏了一些技术细节,因为我对容器的概念还很陌生。
第二种方法是最佳实践:您将创建图像的第二个版本(使用新代码),停止容器,然后运行基于第二个版本的第二个容器。
这个想法是您可以轻松回滚,因为您的映像的第一个版本可以随时用于 运行 最初在生产中的容器。
尝试修改一个 运行ning 容器不是一个好主意,因为一旦它被停止并删除,运行再次将它从原始图像中恢复过来,保持其原始状态。除非您将该容器提交给新图像,否则这些更改将会丢失。即使您确实提交了,您也无法轻松地重建该映像。 (加上你会提交所有容器:它的新代码,还有一堆在服务器执行期间创建的额外文件:日志和其他文件:不是很干净)
容器应该是 运行 来自您可以从 specifications of a Dockerfile 精确构建的图像。它不应在 运行 时间被修改。
不过有几点警告:
- 如果您的容器 is used (
--link
) by other containers,您需要先停止这些容器,停止您的容器,然后 运行 从新版本的映像中创建一个新容器,然后重新启动其他容器。
- 不要忘记重新挂载您使用的任何 data containers 以获得持久数据。
我想弄清楚最佳实践是否会规定在部署我的网络应用程序的新版本时(nodejs 运行 在它自己的容器中)我应该:
- 从容器内部执行
git pull
并更新 "in place";或者 - 使用新代码创建一个新容器并执行两个 docker 容器的热交换
我可能遗漏了一些技术细节,因为我对容器的概念还很陌生。
第二种方法是最佳实践:您将创建图像的第二个版本(使用新代码),停止容器,然后运行基于第二个版本的第二个容器。
这个想法是您可以轻松回滚,因为您的映像的第一个版本可以随时用于 运行 最初在生产中的容器。
尝试修改一个 运行ning 容器不是一个好主意,因为一旦它被停止并删除,运行再次将它从原始图像中恢复过来,保持其原始状态。除非您将该容器提交给新图像,否则这些更改将会丢失。即使您确实提交了,您也无法轻松地重建该映像。 (加上你会提交所有容器:它的新代码,还有一堆在服务器执行期间创建的额外文件:日志和其他文件:不是很干净)
容器应该是 运行 来自您可以从 specifications of a Dockerfile 精确构建的图像。它不应在 运行 时间被修改。
不过有几点警告:
- 如果您的容器 is used (
--link
) by other containers,您需要先停止这些容器,停止您的容器,然后 运行 从新版本的映像中创建一个新容器,然后重新启动其他容器。 - 不要忘记重新挂载您使用的任何 data containers 以获得持久数据。