链接Docker容器来组合不同的库

Docker容器可以被链接。 大多数示例都涉及将Redis容器与SQL容器链接起来。 连接容器的美妙之处在于,您可以将SQL环境与Redis环境分开,而不是构build一个单一的映像,可以保持两个很好的独立映像。

我可以看到这是如何工作的服务器应用程序(通过端口传输通信),但我有麻烦复制类似的方法不同的图书馆。 作为一个具体的例子,我想使用一个Ipython Notebook的容器和C / C ++库caffe(通过一个子文件夹中的一个包提供一个Python接口)和一个优化库,比如Ipopt。 Ipython和Caffe的容器很容易存在,而我目前正在为Ipopt制作一个单独的图像。 然而,如何将三者连接在一起而不需要构build一个巨大的单片Dockerfile呢? Caffe,Ipython和Ipopt都有一系列的依赖关系,使得整合维护成为一场真正的噩梦。

我对Docker容器的看法是,每个容器通常代表一个进程 。 比如redis或者nginx 。 容器通常使用networking或卷上的共享文件相互通信。

每个容器运行自己的操作系统(通常在DockerfileFROMDockerfile )。 在你的情况下,你没有运行任何特定的过程,而是你只是想分享图书馆。 这不是Docker的devise目的,我甚至不确定它是否可行,但它确实似乎是一种奇怪的做事方式。

因此,我的build议是创build一个基本图像,使用最小公分母(一些其他图像共有的共享库),并且其他图像将该图像用作FROM图像。

此外,如果您需要更复杂的环境设置,并需要大量的依赖性和大量configuration,我build议您查看其他configuration工具,例如Chef或Puppet 。

Docker链接是关于链接微服务的,这是单独的进程,并且与我所看到的没有关系。

没有开箱即用的function,可以将单独的泊坞窗图像组合到一个容器中,这就是您在问题中称为“链接”的方式。

如果你不想拥有巨大的整体形象,你可以考虑使用供应工具a-la木偶,厨师或者docker工人。 这里有一个例子。 在理论上,你可以使用现有的食谱/剧本为你需要的图书馆。 我会感到惊讶,但是如果这种方法对你来说比维护你的“庞大的单片”Dockerfile容易得多。