docker如何映射主机分区?

时间:2015-08-11 22:30:43

标签: linux ubuntu docker containers

我对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与on on上的相同。主人。但是,分区容量和使用情况是相同的,所以我在这里感到困惑。

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

感谢您的帮助。

加成

Dockerfile有一行

VOLUME /var/lib/cassandra

1 个答案:

答案 0 :(得分:3)

  

问题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存储驱动程序,这两个驱动程序都在主机文件系统之上为容器创建“覆盖”文件系统。如果您使用df存储驱动程序,则devicemapper的输出会有所不同,依赖于设备映射器块设备而不是覆盖文件系统。