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

edu*_*tua 5 linux deployment backend docker

我是使用Docker的新手,我怀疑在我的堆栈中使用一个图像库,或者我必须根据我的需要定义每个图像.
例如,阅读关于使用docker创建网站的博客,作者建议使用以下Stack: 在此输入图像描述

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

Sas*_*cha 6

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

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

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

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

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

问候,

萨沙


lin*_*iao 1

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

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

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