Docker:如何创建堆栈,多个图像或一个基本映像?

时间:2015-06-10 14:48:23

标签: linux deployment docker backend

我是使用Docker的新手,我怀疑在我的堆栈中使用一个图像库还是我必须根据我的需要定义每个图像。
例如,阅读关于使用docker创建网站的博客,作者建议使用以下Stack: enter image description here

取自http://project-webdev.blogspot.de/2015/05/create-site-based-on-docker-part4-docker-container-architecture.html的图像 现在,看看结构,如果我们在Docker注册表中将基础图像作为mongoDB,io.JS,nginx等技术,为什么在这个例子中我们不使用那些使用单个Docker基础图像的图像呢?

2 个答案:

答案 0 :(得分:6)

我是这篇博客文章/系列的作者,所以让我详细说明我选择一个基本图像的原因。 :)

Docker提供了为后续图像使用公共基本图像的可能性,因此您可以堆叠所有图像,并且每个图像仅包含底层图像的差异(这是docker的最大优势!)。您可以节省磁盘空间和RAM。如果您不关心它(我的意思是RAM和存储便宜),您也可以使用多个图像。

一个基本映像的另一个优点是您可以根据需要配置/保护该基本映像。如果为每个容器使用不同的基本映像,则必须维护所有容器(例如防火墙),Docker将下载几个不同的映像(使用更多磁盘空间,容器构建需要更长时间)。)

但是看看官方图片时有什么区别?官方的mongodb,redis和MySQL图像都是基于debian:wheezy图像。因此,如果您使用这些图像,它们也将基于相同的基本图像,不会被他们?

无论如何,如果你想使用你自己的架构,请随意...请考虑这个架构/博客文章,作为创建Docker设置的可能想法。感谢Docker,他们分享内核,你可以使用你想要的任意数量的图像。 :)

此致

的Sascha

答案 1 :(得分:1)

我认为这取决于应用程序,但在这种情况下,你是对的,拥有一个大的基本图像是没有意义的。

根据我的理解,作者创建了一个基本图像,然后从该基本图像构建了许多其他图像。为docker构建图像时,会创建许多中间图像,因此如果基本图像相同,则可以共享它,并可能在您的计算机上节省一些内存。

但我认为在运行容器时没有任何区别。每个容器都是独立的,它们基本上只共享linux内核。它实际上非常糟糕,因为在这种情况下基本图像非常庞大,并且需要大量资源才能从像这样的图像中生成容器。每个服务的专用映像都小得多,从而从它们启动容器时占用的资源要少得多。所以,无论你在构建大型基础图像时能够节省多少内存都不值得。