docker如何映射主机分区?

我对Docker相对来说比较陌生,当我启动一个容器(一个Ubuntu的基础镜像)时,我注意到了以下几点:

在主机上,

$ df -h ... /dev/sdc1 180M 98M 70M 59% /boot /dev/sdc2 46G 20G 24G 46% /home /dev/sdc5 37G 7.7G 27G 23% /usr /dev/sdc6 19G 13G 5.3G 70% /var $ lsblk ... sdc 8:32 0 232.9G 0 disk ├─sdc1 8:33 0 190M 0 part /boot ├─sdc2 8:34 0 46.6G 0 part /home ├─sdc3 8:35 0 18.6G 0 part / ├─sdc4 8:36 0 1K 0 part ├─sdc5 8:37 0 37.3G 0 part /usr ├─sdc6 8:38 0 18.6G 0 part /var ├─sdc7 8:39 0 29.8G 0 part [SWAP] └─sdc8 8:40 0 42.8G 0 part 

在容器上

 $ df -h Filesystem Size Used Avail Use% Mounted on rootfs 19G 13G 5.3G 70% / none 19G 13G 5.3G 70% / tmpfs 7.8G 0 7.8G 0% /dev shm 64M 0 64M 0% /dev/shm /dev/sdc6 19G 13G 5.3G 70% /etc/hosts tmpfs 7.8G 0 7.8G 0% /proc/kcore tmpfs 7.8G 0 7.8G 0% /proc/latency_stats tmpfs 7.8G 0 7.8G 0% /proc/timer_stats $ lsblk sdc 8:32 0 232.9G 0 disk |-sdc1 8:33 0 190M 0 part |-sdc2 8:34 0 46.6G 0 part |-sdc3 8:35 0 18.6G 0 part |-sdc4 8:36 0 1K 0 part |-sdc5 8:37 0 37.3G 0 part |-sdc6 8:38 0 18.6G 0 part /var/lib/cassandra |-sdc7 8:39 0 29.8G 0 part [SWAP] `-sdc8 8:40 0 42.8G 0 part 

问题1 :为什么在主机和容器之间的不同位置安装了sdc6

由于两个挂载点的内容不同,所以我假设docker必须在容器上做一些设备映射,所以sdc6中的sdc6与主机上的sdc6不一样。 但是,分区容量和使用率是相同的,所以我在这里很困惑。

问题2 :为什么容器的根目录使用率如此之高? docker图像没有太多的东西。

谢谢你的帮助。

加成

Dockerfile有一行

 VOLUME /var/lib/cassandra 

问题1:为什么在主机和容器之间的不同位置安装了sdc6?

你的主机上的/dev/sdc6/var ,这是/var/lib/docker驻留的地方,Docker保存某些数据,例如分配给你的容器的hosts文件。

hosts文件暴露在容器内的绑定装载,这就是为什么你看到:

 /dev/sdc6 19G 13G 5.3G 70% /etc/hosts 

问题2:为什么容器的根目录使用率如此之高? 码头图像没有太多的东西。

看看容器内的df输出:

 rootfs 19G 13G 5.3G 70% / 

现在看看主机上的df输出,你会看到:

 /dev/sdc6 19G 13G 5.3G 70% /var 

容器内的df正在反映主机文件系统的状态。 这表明您正在使用aufsoverlay存储驱动程序,它们都在主机文件系统之上为容器创建“覆盖”文件系统。 如果使用devicemapper存储驱动程序, df的输出看起来会有所不同,但依赖于设备映射程序块设备而不是覆盖文件系统。