【问题标题】:Docker: How to create a stack, multiple images or one base image?Docker:如何创建堆栈、多个镜像或一个基础镜像?
【发布时间】:2015-08-25 21:52:16
【问题描述】:

我是使用 Docker 的新手,我怀疑是否要为我的堆栈使用一个映像库,或者我必须根据自己的需要定义每个映像。
例如,阅读一篇关于使用 docker 创建网站的博客,作者建议使用以下堆栈:

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

【问题讨论】:

    标签: linux deployment docker backend


    【解决方案1】:

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

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

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

    但是看官方图片有什么不同呢?官方的 mongodb、redis 和 MySQL 镜像基于 debian:wheezy 镜像。因此,如果您使用这些图像,它们也将基于相同的基础图像,不是吗?

    无论如何,如果您想使用自己的架构,请随意...请考虑将此架构/博客文章作为创建 Docker 设置的可能想法。感谢 Docker 及其共享内核的方式,您可以使用任意数量的图像。 :)

    问候,

    萨沙

    【讨论】:

    • 嗨@Sascha 感谢您的回答。现在我可以根据一张图片更好地理解您的决定。我怎样才能联系到您谈谈我对我正在从事的项目的一些疑问?。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 2017-04-24
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2017-12-31
      相关资源
      最近更新 更多