使用busybox图片时我有些怀疑

时间:2019-01-18 06:29:03

标签: image 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确实会计算这些文件。我很困惑。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

它们都是相同的文件,因此 du (1)不会对它们进行多次计数。 (the POSIX spec要求这样做。)如果在目录上运行ls -i,则会看到此信息:每个命令都将具有相同的编号,其中该编号唯一地标识磁盘上的实际基础文件。

Busybox的工作方式是,有一个提供所有内置命令的二进制文件,并且在启动时会查看启动的名称来决定要做什么。默认情况下, ln (1)命令将为现有文件创建硬链接或备用名称:

# 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

因此shcpbusybox等。实际上都是相同的(紧凑)文件,这就是Docker映像(或可启动)的原因中等)(基于Busybox)。