Docker持续部署工作流程

7
我计划使用基于Jenkins和Docker交付(CD)的工作流程。我的想法是让Jenkins自动构建每个绿色构建的Docker映像,然后通过Jenkins或“手动”方式部署该映像(我尚未确定是否要自动运行每个绿色构建)。
建立新映像很容易。我的问题在于部署本身。什么是“重新加载”或“重启”正在运行的Docker容器的最佳做法?如果容器的映像已更改,如何在内部运行服务的情况下优雅地重新加载它?我需要使用多个运行容器和负载平衡的传统方法来完成还是有一种“Docker”的方式?

2
请参见:https://dev59.com/BWMl5IYBdhLWcg3wkn0T - Mark O'Connor
2个回答

6
假设容器的图像已更改,我在服务运行时如何优雅地重新加载它?
您不希望这样做。
Docker是管理应用程序及其依赖关系的简单系统。它之所以简单而强大,是因为应用程序的ALL依赖项都与其捆绑在一起。如果您的应用程序今天在笔记本电脑上运行,明天它也会在服务器上运行。这是因为我们捕获了您应用程序的100%的"输入"。
一旦引入“升级”和“重启”等概念,您的应用程序可能会(意外地)在内部存储状态。这意味着明天它可能会与今天不同(在重启和升级100次后)。
最好使用负载均衡器(或类似工具)在版本之间进行过渡,而不是试图干扰Docker的理念。

好的回答,虽然可以补充一下这个事实:优雅地终止正在运行的进程仍然很重要。 - Hedde van der Heide
Docker已经发送信号并等待您的应用程序退出(默认仅为10秒,您可能需要增加它)。我的评论试图表达“在容器内重新启动服务(或进行任何混乱)是一种反模式”。始终首选从头开始启动容器。其他任何操作都只会积累技术债务,并在以后造成巨大问题。 - BraveNewCurrency

1
Docker机器本身应该始终是不可变的,因为您必须替换它以进行新部署。在Docker容器内部存储状态将不起作用,当您想要频繁地发布您在CI上构建的新版本时。
Docker支持卷,可以让您将文件永久地写入主机上的某个文件夹中。然后,在升级Docker容器时,使用相同的卷,因此您可以访问旧容器写入的相同文件。

https://docs.docker.com/userguide/dockervolumes/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接