2013-12-23 203 views
8

我打算在最后使用Docker建立一个基于jenkins的CD工作流程。 我的想法是自动为每个绿色构建构建一个Docker镜像(通过Jenkins),然后通过jenkins或'hand'部署该镜像(我还不确定是否要自动运行每个绿色构建)。Docker持续部署工作流程

开始构建新图像很简单。我的问题是关于部署本身。 “重新加载”或“重新启动”正在运行的码头集装箱的最佳做法是什么?假设容器的图像已更改,如何在服务运行期间优雅地重新加载它?我是否需要使用多个正在运行的容器和负载平衡来进行传统舞蹈,还是需要“有条理的”方式?

+2

参见:http://stackoverflow.com/questions/18285212/如何规模 - 码头 - 容器在生产/ –

回答

6

假设为容器更改了映像,如何在运行服务时正常重新装载映像?

你不想要这个。

Docker是一个用于管理应用程序及其依赖项的简单系统。它很简单而且健壮,因为所有应用程序的依赖关系都与它捆绑在一起。如果您的应用程序今天在您的笔记本电脑上运行,它将在您的服务器上运行。这是因为我们已经为您的应用程序捕获了100%的“输入”。

只要引入“升级”和“重新启动”等概念,应用程序就可以(意外)在内部存储状态。这意味着明天它的行为可能会比今天的行为有所不同(重新启动并升级100次后)。

最好使用负载均衡器(或类似的)在您的版本之间进行转换,而不是尝试使用Docker的理念。

+0

好的答案,虽然可以增加一个事实,它仍然很重要,优雅地杀死正在运行的进程 –

+0

码头已经发送一个信号,并等待你的应用程序退出(只有10秒默认情况下,您可能需要增加它)。我的评论试图说“在一个容器内重新启动服务(或任何有关)是一种反模式”。总是喜欢开始新鲜的容器。其他任何事情都只是建立技术债务,这将导致严重的问题。 – BraveNewCurrency

1

Docker机器本身应该永远不可变,因为您必须将其替换为新的部署。当您想要发布经常在CI上构建的新版本时,在Docker容器内存储状态将不起作用。

Docker支持卷,它将允许您将永久文件写入主机上的某个文件夹。当您再升级泊坞容器使用相同的音量,你就可以访问由旧集装箱写同样的文件:

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