docker 如何映射主机分区?
How does docker map host partitions?
我对 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
在容器里是不一样的作为主机上的那个。但是分区的容量和用途都是一样的,所以这里搞糊涂了。
问题2:为什么容器根目录使用率这么高? docker 图片上没有太多内容。
感谢您的帮助。
加法
Dockerfile 有一行
VOLUME /var/lib/cassandra
Question 1: why is sdc6 mounted on different places between the host and the container?
/dev/sdc6
在您的主机上是 /var
,这是 /var/lib/docker
所在的位置,也是 Docker 保存某些数据的位置,例如分配的 hosts
文件到你的容器。
hosts
文件作为容器内的绑定挂载公开,这就是您看到的原因:
/dev/sdc6 19G 13G 5.3G 70% /etc/hosts
Question 2: why is the container's root dir usage so high? The docker image doesn't have much stuff on it.
看看容器内的df
输出:
rootfs 19G 13G 5.3G 70% /
现在查看主机上的 df
输出,您会看到:
/dev/sdc6 19G 13G 5.3G 70% /var
容器内的 df
反映了主机文件系统的状态。这表明您正在使用 aufs
或 overlay
存储驱动程序,它们都在主机文件系统之上为容器创建 "overlay" 文件系统。如果您使用 devicemapper
存储驱动程序,df
的输出会有所不同,它依赖于设备映射器块设备而不是覆盖文件系统。
我对 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
在容器里是不一样的作为主机上的那个。但是分区的容量和用途都是一样的,所以这里搞糊涂了。
问题2:为什么容器根目录使用率这么高? docker 图片上没有太多内容。
感谢您的帮助。
加法
Dockerfile 有一行
VOLUME /var/lib/cassandra
Question 1: why is sdc6 mounted on different places between the host and the container?
/dev/sdc6
在您的主机上是 /var
,这是 /var/lib/docker
所在的位置,也是 Docker 保存某些数据的位置,例如分配的 hosts
文件到你的容器。
hosts
文件作为容器内的绑定挂载公开,这就是您看到的原因:
/dev/sdc6 19G 13G 5.3G 70% /etc/hosts
Question 2: why is the container's root dir usage so high? The docker image doesn't have much stuff on it.
看看容器内的df
输出:
rootfs 19G 13G 5.3G 70% /
现在查看主机上的 df
输出,您会看到:
/dev/sdc6 19G 13G 5.3G 70% /var
容器内的 df
反映了主机文件系统的状态。这表明您正在使用 aufs
或 overlay
存储驱动程序,它们都在主机文件系统之上为容器创建 "overlay" 文件系统。如果您使用 devicemapper
存储驱动程序,df
的输出会有所不同,它依赖于设备映射器块设备而不是覆盖文件系统。