Docker图像的大小和虚拟大小有什么区别?

iqxoj9l9  于 2023-03-07  发布在  Docker
关注(0)|答案(3)|浏览(160)

我有一个私人注册表,我存储我所有的 Docker 的形象。
我注意到,当我从其中提取一个图像时,本地计算机上的图像和注册表上的图像的大小差别很大。
例如,我有一个名为mydb的映像(大约126 MB)。
当我在本地计算机上调用它并执行***"docker images"*时,它说该映像的"虚拟大小"现在几乎大了三倍(388 MB)。
我想知道它的原因是什么,以及
"虚拟大小"**实际上是什么意思。
谢谢你:)。

nkoocmlb

nkoocmlb1#

你可以在这里找到这个概念的一个很好的解释:https://github.com/docker/docker.github.io/issues/1520#issuecomment-305179362
从杰兹塔
“size”和“virtual size”描述了容器使用的磁盘空间量。让我试着解释一下:
启动容器时,启动容器的映像将以只读方式安装。在此之上,将安装一个可写层,在其中写入对容器所做的任何更改。
映像的只读层可以在从同一映像启动的任何容器之间共享,而“可写”层在每个容器中是唯一的(因为:你不希望在容器“a”中所做的更改出现在容器“B”中(笑)
返回docker ps -s输出;
大小”信息显示数据量(在磁盘上),用于每个容器的可写层“虚拟大小”是用于只读图像数据的磁盘空间总量,该只读图像数据由容器和可写层使用。(如前所述),只读层的磁盘空间可以在container之间共享,因此仅占用磁盘空间 * 一次 *(也许一个不同的名字(“共享”大小?)事后看来会更好,但命名很难:)。编辑:virtual实际上显示了容器的只读层(图像)和可写层的组合大小。
在下面的示例中,我启动了10个nginx容器;

所有这些容器都使用相同的映像,所以“虚拟大小”(在本例中为183 MB)只使用一次,而不管有多少个容器是从同一个映像启动的-我可以启动1个容器或1000个容器;没有额外的磁盘空间被使用。2“大小”(在例子中是2B)对于每个容器是唯一的,所以在磁盘上使用的总空间是:
183 MB + 10个2字节
请注意,显示的大小不包括容器使用的所有磁盘空间。目前不包括的内容有:

  • 用于日志文件的磁盘空间(如果您使用json-file日志记录驱动程序)-如果您的容器生成了大量日志,并且没有配置日志循环(最大文件/最大大小日志记录选项),那么磁盘空间可能会很大
  • 容器使用的体积
  • 用于容器配置文件(hostconfig.json、config.v2.json、hosts、hostname、resolv.conf)的磁盘空间-

尽管这些文件很小

  • 写入磁盘的内存(如果启用交换)
  • 检查点(如果您使用的是实验性检查点/恢复功能)
exdqitrt

exdqitrt2#

现在,关于容器的**“虚拟尺寸”的说明可以在官方文件中找到。
(But我不知道
图像**是否有虚拟大小。)
https://docs.docker.com/storage/storagedriver/#container-size-on-disk
要查看正在运行的容器的大致大小,可以使用docker ps -s命令。两个不同的列与大小有关。

  • size:用于每个容器的可写层的数据量(在磁盘上)。
  • 虚拟大小:容器使用的只读图像数据所使用的数据量加上容器的可写层大小。多个容器可以共享部分或全部只读图像数据。从同一图像开始的两个容器共享100%的只读数据,而具有不同图像但具有共同层的两个容器共享这些共同层。因此,你不能只计算虚拟大小的总和。这可能会高估总的磁盘使用量。
lawou6xi

lawou6xi3#

“虚拟”大小和常规大小并不神秘,但您应该记住,映像有中间映像或“缓存”(如果您愿意)。因此,映像的虚拟大小是您看到的:

docker images

并且图像的图像磁盘大小是与此图像关联的所有缓存图像的总和,您可以看到:

docker images -a

相关问题