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

     2023-02-23     240

关键词:

【中文标题】docker 镜像的大小和虚拟大小有啥区别?【英文标题】:What is the difference between the size and the virtual size of the docker images?docker 镜像的大小和虚拟大小有什么区别? 【发布时间】:2016-10-24 07:59:30 【问题描述】:

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

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

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

当我将它拉到我的本地机器上并执行 "docker images" 时,它会显示该图像的 "VIRTUAL SIZE"现在几乎是原来的三倍 (388 MB)。

我想知道它的原因是什么以及“虚拟大小”的实际含义。

谢谢你:)。

【问题讨论】:

【参考方案1】:

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

来自 thaJeztah

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

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

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

回到docker ps -s输出;

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

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

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

183MB + 10 * 2B

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

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

【讨论】:

从链接中引用基本信息总是一个好主意(以防链接失效;并为未来的读者提供一个“起点”来掌握链接上所说的内容。)从该链接:““大小”信息显示了用于每个可写层的数据量(在磁盘上)容器。“虚拟大小”是用于容器和可写层使用的只读图像数据的磁盘空间总量。” 我刚刚注意到链接是关于 container 的大小,而问题是关于 image 的大小。我不知道容器和图像的大小/虚拟大小的含义是否完全相同。坦率地说,我什至不知道“虚拟大小”对于 图像 意味着什么,除非它意味着“由该图像制成的容器将具有的虚拟大小”。也就是说,容器内访问的内存空间大小,是只读图像数据(由该图像的所有实例共享)加上容器的可写层(每个实例都需要自己的)的总和。 所以磁盘空间是共享的,但是 RAM 呢?每个进程堆栈都有自己的底层程序副本? @geige v【参考方案2】:

“虚拟”大小和常规大小并不神秘,但您应该记住,图像具有中间图像或“缓存”(如果您愿意)。所以图像的虚拟大小就是你看到的那个:

docker images

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

docker images -a

【讨论】:

不幸的是,这个答案将中间层的主题与虚拟与非虚拟大小混为一谈。恕我直言,这只会增加主题的混乱,最好由作者删除。 (它已经被其他人否决了;我只是就它为什么没用发表我的看法。)

在 Docker 中,容器和镜像有啥区别? [复制]

】在Docker中,容器和镜像有啥区别?[复制]【英文标题】:InDocker,what\'sthedifferencebetweenacontainerandanimage?[duplicate]在Docker中,容器和镜像有什么区别?[复制]【发布时间】:2014-02-2506:07:31【问题描述】:Docker中的容器和镜像有什么区... 查看详情

docker和传统虚拟机有啥区别?

参考技术A  Docker是一种轻量级的虚拟化技术,比传统的虚拟机性能更好,但也有人认为虚拟机比Docker更好,那么Docker和虚拟机哪个好?相信不少人对此有所疑问,具体内容请看下文:  Docker和虚拟机有各自擅长的领域,在软... 查看详情

docker跟一般的虚拟机有啥区别

Docker和虚拟机有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣势:1、Docker启动快速属于秒级别,虚拟机通常需要几分钟去启动;2、Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交... 查看详情

Docker 镜像的镜像 ID 和它的摘要有啥区别?

】Docker镜像的镜像ID和它的摘要有啥区别?【英文标题】:What\'sthedifferencebetweenaDockerimage\'sImageIDanditsDigest?Docker镜像的镜像ID和它的摘要有什么区别?【发布时间】:2019-10-1507:21:27【问题描述】:这让我感到非常困惑。我认为Docker... 查看详情

在 Docker 镜像名称中,Alpine、Jessie、Stretch 和 Buster 有啥区别?

】在Docker镜像名称中,Alpine、Jessie、Stretch和Buster有啥区别?【英文标题】:InDockerimagenameswhatisthedifferencebetweenAlpine,Jessie,Stretch,andBuster?在Docker镜像名称中,Alpine、Jessie、Stretch和Buster有什么区别?【发布时间】:2019-02-0414:14:06【问... 查看详情

Docker 和 Python virtualenv 有啥区别?

】Docker和Pythonvirtualenv有啥区别?【英文标题】:What\'sthedifferencebetweenDockerandPythonvirtualenv?Docker和Pythonvirtualenv有什么区别?【发布时间】:2018-12-0103:58:24【问题描述】:根据我对Docker的了解,它是一种用于虚拟环境的工具。在他... 查看详情

docker容器与虚拟机有啥区别?

参考技术A我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。虚拟机先说说什么是虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系... 查看详情

使用 em 和百分比的 css 字体大小有啥区别? [复制]

】使用em和百分比的css字体大小有啥区别?[复制]【英文标题】:whatisthedifferencebetweencssfontsizeusingemandpercentage?[duplicate]使用em和百分比的css字体大小有什么区别?[复制]【发布时间】:2011-04-2521:04:16【问题描述】:可能重复:Fontsiz... 查看详情

docker和虚拟机的区别

参考技术Adocker是一种具体的虚拟化技术虚拟机是个虚拟化技术的一个虚拟出来的机器为什么叫虚拟,是和物理机对应的。传统一台物理机装一个linux系统虚拟化技术可以使得一台物理机做出来多多个虚拟机,每个虚拟机装一个lin... 查看详情

docker镜像的文件大小加倍,不同的python版本作为基础镜像

】docker镜像的文件大小加倍,不同的python版本作为基础镜像【英文标题】:Filesizeofdockerimagedoubleswithdifferentpythonversionasbaseimage【发布时间】:2022-01-1912:15:59【问题描述】:我用一些apt和pip包为jupyterlab构建dockerimages。dockerimagels:jupy... 查看详情

open() 的缓冲参数和迭代文件时使用的硬编码预读缓冲区大小有啥区别?

】open()的缓冲参数和迭代文件时使用的硬编码预读缓冲区大小有啥区别?【英文标题】:Whatisthedifferencebetweenthebufferingargumenttoopen()andthehardcodedreadaheadbuffersizeusedwheniteratingthroughafile?open()的缓冲参数和迭代文件时使用的硬编码预读... 查看详情

docker容器和虚拟机的比较

containers:容器是在应用层的抽象化,多个容器能够运行在同一台机器上,和其他容器共享操作系统的核,每个容器运行都独立的运行在用户的空间内。容器需要的空间比虚拟机要小(容器镜像的大小一般为MBs级别的),容器能够... 查看详情

强力的应用容器引擎——docker的安装和镜像容器的基本操作!(代码片段)

docker的安装和基本使用介绍一、Docker概述1.1Docker初识1.2容器的特点1.3容器和Docker与虚拟机的区别1.3.1容器与虚拟机的区别1.3.2Docker与虚拟机的区别1.3.3容器在内核中支持2种重要技术1.4Docker核心概念1)镜像2)容器3)仓... 查看详情

docker有啥优势?

1、更高效的利用系统资源docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。2、更快... 查看详情

深刻理解docker镜像大小

都说容器大法好,可是假设没有Docker镜像,Docker该是多无趣啊。是否还记得第一个接触Docker的时候,你从DockerHub下拉的那个镜像呢?在那个处女镜像的基础上。你执行了容器生涯的处女容器。镜像的基石作用已经非常明显。在Doc... 查看详情

运维实操——docker容器镜像大小优化(代码片段)

docker容器(二)镜像大小优化1、部署有nginx的rhel7系统的镜像2、镜像优化前言:本文是在上一篇的基础上攥写,所以yum源已配好1、部署有nginx的rhel7系统的镜像dockercommit构建新镜像三部曲:1运行容器2修改容器3... 查看详情

当我必须指定内存大小时,malloc 数组和常规数组有啥区别?

】当我必须指定内存大小时,malloc数组和常规数组有啥区别?【英文标题】:WhatisthedifferencebetweenmallocarrayandregulararraywheninbothIhavetospecifymemorysize?当我必须指定内存大小时,malloc数组和常规数组有什么区别?【发布时间】:2017-07-2... 查看详情

docker笔记

...里呢?电影里法师会念咒语,启动程序,才能进入镜像。docker也是一样,启动image,我们就能进去了,进去后的镜像世界就称为容器。简单点说,没启动的是镜像,启动的是容器。 docker是一种容器打包技术,和虚拟机有点类似... 查看详情