docker镜像的大小和虚拟大小有什么区别?

问题描述 投票:0回答:3

我有一个私人注册表,用于存储我所有的 docker 镜像。

我注意到,当我从中提取图像时,本地计算机上的图像大小与注册表中的图像大小差异很大。

例如,我有一个名为 mydb 的图像(大约 126 MB)。

当我将它拉到我的本地机器上并执行“docker images”时,它说该图像的“VIRTUAL SIZE”现在几乎大了三倍(388 MB)。

我想知道这是什么原因,“虚拟尺寸”实际上是什么意思。

谢谢 :) .

docker containers docker-registry image-size
3个回答
18
投票

你可以在这里找到这个概念的一个很好的解释:https://github.com/docker/docker.github.io/issues/1520#issuecomment-305179362

来自thaJeztah

“大小”和“虚拟大小”描述了使用的磁盘空间量 通过一个容器。让我试着解释一下:

启动容器时,容器启动的图片 from 以只读方式挂载。最重要的是,一个可写层是 已安装,其中写入了对容器所做的任何更改。

镜像的只读层可以在任何容器之间共享 这是从同一个图像开始的,而“可写”层是 每个容器都是唯一的(因为:你不希望在 容器“a”出现在容器“b”中微笑)

回到

docker ps -s
输出;

“大小”信息显示已使用的数据量(在磁盘上) 对于每个容器的可写层“虚拟大小”是 用于只读图像数据的磁盘空间总量 容器和可写层。它之所以被命名为“虚拟 大小”,就是(如前所述),磁盘空间 只读层可以在容器之间共享,所以只占用 磁盘空间once(也许是不同的名称(“共享”大小?) 事后看来更好,但命名很难 :) )。编辑:

virtual
实际上显示了只读层(图像)的组合大小, 和容器的可写层。

在下面的例子中,我启动了10个nginx容器;

所有这些容器都使用相同的图像,因此“虚拟大小”(183MB 在示例中)只使用一次,不管有多少个容器 是从同一个图像启动的——我可以启动 1 个容器或一个 千;没有使用额外的磁盘空间。 “大小”(示例中为 2B) 虽然每个容器都是唯一的,所以磁盘上使用的总空间是:

183MB + 10 * 2B

请注意,显示的大小不包括用于 一个容器。目前不包括的东西是;

  • 用于日志文件的磁盘空间(如果您使用 json 文件日志记录驱动程序)——如果您的容器生成很多,这可能会很大 日志和日志轮换(最大文件/最大大小日志记录选项)不是 配置
  • 容器使用的体积
  • 用于容器配置文件的磁盘空间(hostconfig.json、config.v2.json、hosts、hostname、resolv.conf)-
    虽然这些文件很小
  • 内存写入磁盘(如果启用交换)
  • 检查点(如果您使用的是实验性检查点/恢复功能)

0
投票

现在,container"VIRTUAL SIZE"的解释可以在官方文档中找到

(但不知道图片有没有虚拟尺寸。)

https://docs.docker.com/storage/storagedriver/#container-size-on-disk

要查看正在运行的容器的大概大小,可以使用 docker ps -s 命令。两个不同的列与大小有关。

  • size:用于可写层的数据量(在磁盘上) 每个容器。
  • virtual size:用于只读图像数据的数据量 容器使用加上容器的可写层大小。 多个容器可能共享部分或全部只读图像数据。二 从同一图像启动的容器共享 100% 的只读 数据,而两个具有不同图像的容器在 common 共享那些公共层。因此,您不能只将 虚拟尺寸。这高估了一个磁盘的总磁盘使用量 可能不小。

-5
投票

“虚拟”大小和常规大小没有什么神秘之处,但你应该记住图像有中间图像或“缓存”,如果你愿意的话。所以图像的虚拟尺寸是你看到的尺寸:

docker images

一个图像的图像磁盘大小是与该图像相关联的所有缓存图像的总和,您可以看到:

docker images -a
© www.soinside.com 2019 - 2024. All rights reserved.