我在使用busybox图像时有些疑惑
I have some doubts when using the busybox image
我使用sudo docker pull busybox:latest
下载busybox镜像。而且是 1.2MB。
我使用sudo docker inspect busybox:latest
来查找数据目录。这是 /var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f
.
使用 du -sh /var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f
,显示 1.3MB。但是当我进入/var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f/diff/bin
时,我发现有很多可执行文件。它们每个占用 1.1MB。总计 432MB。
为什么du -sh
不计算这些文件的大小?
当我cp
/var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f
到其他目录。 du -sh
在新目录中确实计算了这些文件。我很困惑。
感谢您的帮助。
它们都是同一个文件,因此 du(1) 不会对它们进行多重计数。 (这是 the POSIX spec 所要求的。)如果您在目录上 运行 ls -i
,您将看到这一点:那里的每个命令都有相同的编号,其中该编号唯一标识实际的底层命令磁盘上的文件。
Busybox 的工作方式是,有一个二进制文件提供所有内置命令,当它启动时,它会查看启动时的名称来决定要做什么。 ln(1) 命令将默认为现有文件创建硬 link 或备用名称:
# copy a to b1; if you delete a then b1 is still intact
cp a b1
# b has the name of a; if you delete a then b2 is "dangling"
ln -s a b2
# b3 is a; if you delete a then b3 is fine; if you change a you change b3 too
ln a b
ls -li
所以sh
、cp
、busybox
、等实际上都是相同的(紧凑的)文件,这就是为什么Docker 基于 Busybox 的映像(或可启动媒体)太小了。
我使用sudo docker pull busybox:latest
下载busybox镜像。而且是 1.2MB。
我使用sudo docker inspect busybox:latest
来查找数据目录。这是 /var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f
.
使用 du -sh /var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f
,显示 1.3MB。但是当我进入/var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f/diff/bin
时,我发现有很多可执行文件。它们每个占用 1.1MB。总计 432MB。
为什么du -sh
不计算这些文件的大小?
当我cp
/var/lib/docker/overlay2/0ca30bdc9f5eacfcc7838b165fd811d39c883b4859b256765b55c2e0b3b1710f
到其他目录。 du -sh
在新目录中确实计算了这些文件。我很困惑。
感谢您的帮助。
它们都是同一个文件,因此 du(1) 不会对它们进行多重计数。 (这是 the POSIX spec 所要求的。)如果您在目录上 运行 ls -i
,您将看到这一点:那里的每个命令都有相同的编号,其中该编号唯一标识实际的底层命令磁盘上的文件。
Busybox 的工作方式是,有一个二进制文件提供所有内置命令,当它启动时,它会查看启动时的名称来决定要做什么。 ln(1) 命令将默认为现有文件创建硬 link 或备用名称:
# copy a to b1; if you delete a then b1 is still intact
cp a b1
# b has the name of a; if you delete a then b2 is "dangling"
ln -s a b2
# b3 is a; if you delete a then b3 is fine; if you change a you change b3 too
ln a b
ls -li
所以sh
、cp
、busybox
、等实际上都是相同的(紧凑的)文件,这就是为什么Docker 基于 Busybox 的映像(或可启动媒体)太小了。