我计划在最后用Docker建立一个基于jenkins的CD工作流程。 我的想法是为每个绿色构建自动构建(由Jenkins)一个docker镜像,然后通过jenkins或'hand'部署该图像(我还不确定是否要自动运行每个绿色构建)。
建立新图像很容易。我的问题是关于部署本身。 “重新加载”或“重启”正在运行的docker容器的最佳做法是什么?假设为容器更改了映像,如何在内部运行服务时优雅地重新加载它?我是否需要使用多个运行容器和负载平衡来进行传统舞蹈,或者是否有“停靠”方式?
答案 0 :(得分:6)
假设为容器更改了图像,如何在内部运行服务时优雅地重新加载图像?
你不想要这个。
Docker是一个用于管理应用及其依赖关系的简单系统。它简单而强大,因为应用程序的 ALL 依赖项与它捆绑在一起。如果您的应用程序今天在您的笔记本电脑上运行,它将在您的服务器上运行。这是因为我们已经为您的应用程序捕获了100%的“输入”。
只要您引入“升级”和“重启”等概念,您的应用程序就可以(意外地)在内部存储状态。这意味着明天的行为可能与今天不同(在重新启动和升级100次之后)。
最好使用负载平衡器(或类似工具)在您的版本之间进行转换,而不是尝试使用Docker的理念进行转换。
答案 1 :(得分:1)
Docker计算机本身应始终是不可变的,因为您必须将其替换为新部署。当您希望发布经常在CI上构建的新版本时,在Docker容器中存储状态将不起作用。
Docker支持Volumes,它允许您将永久性文件写入主机上的某个文件夹。然后,当您升级Docker容器时,使用相同的卷,这样您就可以访问旧容器写入的相同文件: