当前位置: 首页 > 面试题库 >

为什么Docker容器映像如此之大?

匡晟
2023-03-14
问题内容

我通过Fedora的Dockerfile创建了一个简单的映像(最初为320 MB)。

添加了Nano(这个1MB大小的微型编辑器),图像的大小已增加到530 MB。我在此基础上添加了Git(30-ish
MB),然后将图像大小的火箭提高到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

但是很难想象这里可能出什么问题。


问题答案:

正如@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

在提交层之前,对于每个RUN都必须这样做,否则删除实际上并不会删除数据。也就是说,在并集/写时复制文件系统中,最后清理并不会真正减少文件系统的使用,因为实际数据已经提交给了较低的层。为了解决这个问题,您必须清洁每一层。

$ 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


 类似资料:
  • 问题内容: 使用Docker时,我们从基础映像开始。我们启动它,创建更改,并将这些更改保存在形成另一个映像的层中。 因此,最终我为自己的PostgreSQL实例提供了一个映像,为我的Web应用程序提供了一个映像,对它们的更改将继续保留。 什么是容器? 问题答案: 图像的实例称为容器。您有一张图像,该图像是您描述的一组图层。如果启动此映像,则该映像具有正在运行的容器。您可以有多个运行中的同一图像容器

  • 问题内容: 宣布Java 11是最新的LTS版本。因此,我们正在尝试基于此Java版本启动新服务。 但是,Java 11的基本Docker映像比Java 8的等效映像大得多: (我只考虑官方的OpenJDK和每个Java版本的最轻量的映像。) 更深入的挖掘发现了以下“事物”: 该openjdk:11-jre-slim图像使用基本图像debian:sid-slim。这带来了两个问题: 比60 MB大

  • 问题内容: 宣布Java 11是最新的LTS版本。因此,我们正在尝试基于此Java版本启动新服务。 但是,Java 11的基本Docker映像比Java 8的等效映像大得多: :84 MB : 283 MB (我只考虑 官方的OpenJDK 和每个Java版本的 最轻量的 映像。) 更深入的挖掘发现了以下“事物”: 该图像使用基本图像。这带来了两个问题: 比60 MB大 在Debian的版本是不稳

  • 在使用Docker时,我们从一个基图像开始。我们启动它,创建更改,这些更改保存在图层中,形成另一个图像。 所以最终我有了一个用于我的PostgreSQL实例的映像和一个用于我的web应用程序的映像,对这些映像的更改将持续保持。 什么是容器?

  • 我从Fedora通过Dockerfile制作了一个简单的图像(最初为320 MB)。 添加了Nano(这个1MB大小的微小编辑器),图像的大小上升到了530MB。我在上面添加了Git(大约30 MB),然后我的图像大小的sky-rockets达到了830 MB。 这不是疯了吗? 我已经尝试导出和导入容器来删除历史/中间图像。这一努力节省了25 MB,现在我的图像大小是804 MB。我也尝试在一个上

  • 问题内容: Docker中的容器和映像之间有什么区别?在《Docker入门》教程中,这两个术语都被使用,但是我不明白它们之间的区别。 有人可以说明一下吗? 问题答案: 图像是实时容器的固定不变快照。容器正在运行(或停止)某些图像的实例。 从名为“ubuntu”的基本映像开始。让我们在ubuntu映像中交互式运行bash并创建一个文件。我们将使用和标志为我们提供一个交互式bash shell。 不要