我最近开始接触Docker和容器。到目前为止,我了解容器背后的理念是每个容器运行一个进程,因此我们最终开发出了无论环境如何都可以轻松,一致地运行的应用程序。另外,这些容器从本质上连接到其映像,因此,如果要将更改保存到容器,则需要提交并创建新映像。
但是,假设我要在一个容器(又称胖容器)中运行多个进程。我知道这是可以做到的,“ Supervisord”和“ Baseimage-docker”之类的东西可以帮助管理胖容器中的进程。
现在我们要解决我的问题:是否可以运行一个胖容器,保存单个进程的运行状态并将该进程迁移到另一个容器?
我在网上看过,但还没有真正找到有人说这是可能的。因此,如果您中的一个人已经想到了这个问题,或者我可能在此过程中错过了一些东西,我会向你们求助。
答案 0 :(得分:0)
我不确定这个问题是否基于观点。但是这是我想您可以执行的操作,可以说您有一个Web应用程序,例如Django应用程序,该应用程序在同一容器中使用Redis,这将被视为胖容器,您需要将Redis迁移为独立容器服务在其自己的容器中,则您必须执行以下操作:
1-准备一个已安装Redis的docker镜像,您可以使用自己的镜像或使用官方的redis docker镜像。
2-从胖容器中复制与Redis一起使用的配置,以便以后可以将其安装在新的Redis容器中
3-更改Django应用程序设置,并使其指向该新的redis容器
4-从胖容器中删除redis服务及其配置,或者构建新映像。
就这样,现在,您应该启动redis容器并重新启动django应用程序容器,以使其生效,或者如果您修改了胖映像,则开始一个新的容器。
答案 1 :(得分:0)
有著名的Quake demo,并且可以使用CRIU迁移整个容器的状态。这可能是我所看到的最接近您所谈论的内容。此处更多内容:https://criu.org/Docker
就容器内的“单个”进程而言,也许只是迁移整个容器并杀死要移动的进程?
我想说的是,Docker社区中更常见的模式是可以自由杀死/更新/等的单进程容器。