当前位置: 首页 > 知识库问答 >
问题:

为什么Docker容器图像这么大?

松和安
2023-03-14

我从Fedora通过Dockerfile制作了一个简单的图像(最初为320 MB)。

添加了Nano(这个1MB大小的微小编辑器),图像的大小上升到了530MB。我在上面添加了Git(大约30 MB),然后我的图像大小的sky-rockets达到了830 MB。

这不是疯了吗?

我已经尝试导出和导入容器来删除历史/中间图像。这一努力节省了25 MB,现在我的图像大小是804 MB。我也尝试在一个run上运行许多命令,但仍然得到相同的初始830MB。

我怀疑是否值得使用Docker。我的意思是,我几乎没有安装任何东西,我已经达到1GB以上。如果我必须添加一些重要的东西,如数据库等,我可能会用完磁盘空间。

有没有人患上可笑的图像大小?你是怎么处理的?

除非我的Dockerfile是错误的?

FROM fedora:latest
MAINTAINER Me NotYou <email@dot.com>
RUN yum -y install nano
RUN yum -y install git

但很难想象这里会出什么问题。

共有1个答案

曹高阳
2023-03-14

正如@RexPosadas所说,映像包括所有层,每一层都包括您所安装内容的所有依赖关系。还需要注意的是,基本镜像(如fedora:latest)往往是非常简单的。您可能会对安装软件的依赖项数量感到惊讶。

通过在每行中添加yum-y clean all,可以使您的安装大大减小:

FROM fedora:latest
RUN yum -y install nano && yum -y clean all
RUN yum -y install git && yum -y clean all

重要的是,在提交层之前,每次运行都要这样做,否则删除实际上并不删除数据。也就是说,在Union/Copy-on-Write文件系统中,在最后进行清理并不能真正减少文件系统的使用,因为实际数据已经提交到较低的层。为了避免这种情况,你必须清洁每一层。

$ docker history bf5260c6651d
IMAGE               CREATED             CREATED BY                                      SIZE
bf5260c6651d        4 days ago          /bin/sh -c yum -y install git; yum -y clean a   260.7 MB
172743bd5d60        4 days ago          /bin/sh -c yum -y install nano; yum -y clean    12.39 MB
3f2fed40e4b0        2 weeks ago         /bin/sh -c #(nop) ADD file:cee1a4fcfcd00d18da   372.7 MB
fd241224e9cf        2 weeks ago         /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar   0 B
511136ea3c5a        12 months ago                                                       0 B
 类似资料:
  • 我有一个文件,它创建了两个实例,一个用于,另一个用于。 当我运行时,我会得到这样的输出: 如果我运行: 我看到两个服务共享。在我的中,我设置了: 在创建前运行一些

  • 问题内容: 我通过Fedora的Dockerfile创建了一个简单的映像(最初为320 MB)。 添加了Nano(这个1MB大小的微型编辑器),图像的大小已增加到530 MB。我在此基础上添加了Git(30-ish MB),然后将图像大小的火箭提高到830 MB。 那不是疯了吗? 我试图导出和导入容器以删除历史记录/中间图像。这项工作最多可节省25 MB,现在我的图像大小为804 MB。我也尝试过

  • Java11被宣布为最新的LTS版本。因此,我们正在尝试基于这个Java版本启动新的服务。 但是,Java11的基本Docker映像要比Java8的等效映像大得多: > :84 MB :283 MB (我只考虑官方的OpenJDK和每个Java版本的最轻量级映像。) 更深一层的挖掘,揭开了以下“事情”: 安装在映像中的包比(在运行的Docker容器内)大3倍: > : : 深入研究之后,我发现了这

  • 我有一个非常简单的dockerfile 然后使用 根据我对Docker的了解,当我键入时,它应该只在下显示;但是这不是发生的事情。相反,我看到: 为什么会出现基础图像?例如,我从中提取的存储库 但这并没有出现。那么在这种情况下,为什么会有基础图像呢?

  • 我是Docker的新手,正在尝试准确理解Docker映像是什么。Docker映像的每个定义都使用术语“层”,但似乎没有定义层的含义。 从Docker官方文件: 我们已经看到Docker图像是只读模板,从中启动Docker容器。每个图像由一系列层组成。Docker利用union文件系统将这些层合并到单个图像中。Union文件系统允许透明地覆盖单独文件系统(称为分支)的文件和目录,形成单个连贯的文件系

  • 我对Docker是全新的,我正在努力理解Docker形象到底是什么。Docker图像的每个定义都使用术语“层”,但似乎没有定义层的含义。