我有一个私人注册表,用于存储我所有的 docker 镜像。
我注意到,当我从中提取图像时,本地计算机上的图像大小与注册表中的图像大小差异很大。
例如,我有一个名为 mydb 的图像(大约 126 MB)。
当我将它拉到我的本地机器上并执行“docker images”时,它说该图像的“VIRTUAL SIZE”现在几乎大了三倍(388 MB)。
我想知道这是什么原因,“虚拟尺寸”实际上是什么意思。
谢谢 :) .
你可以在这里找到这个概念的一个很好的解释: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)-
虽然这些文件很小- 内存写入磁盘(如果启用交换)
- 检查点(如果您使用的是实验性检查点/恢复功能)
现在,container的"VIRTUAL SIZE"的解释可以在官方文档中找到
(但不知道图片有没有虚拟尺寸。)
https://docs.docker.com/storage/storagedriver/#container-size-on-disk
要查看正在运行的容器的大概大小,可以使用 docker ps -s 命令。两个不同的列与大小有关。
- size:用于可写层的数据量(在磁盘上) 每个容器。
- virtual size:用于只读图像数据的数据量 容器使用加上容器的可写层大小。 多个容器可能共享部分或全部只读图像数据。二 从同一图像启动的容器共享 100% 的只读 数据,而两个具有不同图像的容器在 common 共享那些公共层。因此,您不能只将 虚拟尺寸。这高估了一个磁盘的总磁盘使用量 可能不小。
“虚拟”大小和常规大小没有什么神秘之处,但你应该记住图像有中间图像或“缓存”,如果你愿意的话。所以图像的虚拟尺寸是你看到的尺寸:
docker images
一个图像的图像磁盘大小是与该图像相关联的所有缓存图像的总和,您可以看到:
docker images -a