【问题标题】:What is the most light weight base image I can use to build a Dockerfile?我可以用来构建 Dockerfile 的最轻量级的基础镜像是什么?
【发布时间】:2017-08-15 08:18:07
【问题描述】:

我通常使用 Ubuntu 或 Arch Linux 映像,但最近我发现有一个名为 CoreOS 的操作系统专门用于 docker 容器。

由于我是 docker 新手,我不确定哪一个是构建 Dockerfile 的最佳基础镜像。这似乎是一个愚蠢的问题,但如果我在多个容器上运行大量微服务,那么容器应该尽可能轻。

【问题讨论】:

    标签: docker dockerfile docker-build


    【解决方案1】:

    这真的取决于您的要求:

    1. FROM scratch: 如果您能够静态编译您的应用程序并且不需要任何其他二进制文件(库、shell 或任何其他命令周期),那么您将使用完全空的“scratch”。你会看到它被用作其他基础镜像的起点,它也出现在许多预编译的 Go 命令中。

    2. Busybox:我认为这与其说是基本映像,不如说是一个方便的实用程序容器。您可以在非常小的尺寸中获得许多常用命令。但是,您没有得到的是通用包管理器,可以轻松安装其他组件。当前大小小于 1M。

    3. Alpine:这是 docker 对流线型图像的看法,它做得很好,而且体积小,但也给你一个包管理器。然而,小尺寸是有代价的,不包括 glibc 之类的东西。你会发现很多官方镜像都是基于 Alpine 的,所以在容器生态里面,这是一个非常流行的选择。在开始添加包之前,它的当前大小约为 2M。

    4. Debian、Ubuntu 和 CentOS:这些是较少的轻量级基础映像,每个大约有 5000 万个左右。但是他们随着规模的扩大而失去的东西,他们获得了大量的软件包,你可以从中提取,还有很多人正在测试、修复错误,并为上游的事情做出贡献。它们还附带一些库,某些应用程序可能会预装这些库。

    虽然最后一个选项有点大,但请记住,基本图像只能通过网络推送并存储在磁盘上一次。之后,除非您更改它们,否则在它们之上构建的任何映像只需要发送引用该基础映像中的层的清单,并且 docker 引擎将看到它已经下载了这些层。并且使用 union fs,即使您运行 100 个容器都指向该映像,也永远不需要复制这些层,它们每个都在磁盘上为所有映像层使用相同的只读层,并将它们的更改写入它们的容器特定的 RW 层。

    【讨论】:

    • 也许谈谈 tianon/true/ image(总共 125 字节)和仅数据容器有助于改进您的解释。
    • 我不喜欢只有数据的容器。它们混合了容器和数据的管理,在您清理容器时有丢失数据的风险,并且已被命名卷取代。
    【解决方案2】:

    尝试alpine linux 基本映像,它非常小(5M)并且可以访问包存储库。我们正在使用它在我们的生产环境中构建我们的 JDK 基础映像,并且到目前为止它运行良好。

    【讨论】:

      猜你喜欢
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2018-05-05
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多