链接 docker 个容器以组合不同的库

Linking docker containers to combine different libraries

Docker 个容器可以 linked。大多数示例涉及使用 SQL 容器 linking 一个 Redis 容器。 linking 容器的美妙之处在于,您可以将 SQL 环境与 Redis 环境分开,而不是构建一个单一的图像,而是可以维护两个很好地独立的图像。

我可以看到这对服务器应用程序(通信通过端口传输)是如何工作的,但我无法为不同的库复制类似的方法。作为一个具体的例子,我想使用带有 Ipython Notebook 的容器以及 C/C++-library caffe(它通过其中一个包公开 Python 接口子文件夹)和优化库,例如 Ipopt。 Ipython 和 Caffe 的容器很容易存在,我目前正在为 Ipopt 制作一个单独的图像。然而,我如何 link 将这三者结合在一起而不构建一个巨大的整体 Docker 文件? Caffe、Ipython 和 Ipopt 各有一系列的依赖关系,使得联合维护成为真正的噩梦。

Docker 链接是关于链接微服务,这是单独的进程,据我所知与您的​​问题无关。

没有开箱即用的工具可以将单独的 docker 图像组合到一个容器中,就像您在问题中调用 'linking' 的方式一样。

如果您不想拥有那个巨大的单一图像,您可以考虑将配置工具 a-la puppet、chef 或 ansible 与 docker 一起使用。一例here。从理论上讲,您可能会在那里使用现有的 recipes/playbooks 作为您需要的库。如果这种方法对您来说比维护 "big monolithic" Docker 文件容易得多,我会感到惊讶。

我对 docker 容器的看法是,每个容器通常代表 一个进程 。例如。 redisnginx。容器通常相互通信 using networking or via shared files in volumes.

每个容器都运行自己的操作系统(通常在 DockerfileFROM 部分指定)。在你的情况下,你不是 运行 任何特定的进程,而是你只是想共享库。这不是 docker 的设计目的,我什至不确定它是否可行,但看起来确实是一种奇怪的做事方式。

因此,我的建议是创建一个具有最小公分母的基础图像(一些共享库对所有其他图像都是通用的),并且您的其他图像使用该图像作为 FROM-图片。

此外,如果您需要更复杂的环境设置以及大量依赖项和繁重的配置,我建议您查看其他配置工具,例如 Chef or Puppet