Docker 镜像和 Docker 容器有一个缓慢的分层文件系统。通过将目录定义为数据卷,您可以指示 docker让这些目录位于慢速分层文件系统之外。这是多重后果,其中:
- 快速文件系统
- 在多个容器之间共享卷的能力
- 持久性(只要存在至少一个使用该卷的容器)
这就是为什么卷不仅是商品,而且对于预期具有良好 I/O 性能的目录来说是必需品。
据我所知,VOLUME /var/data 与只说 RUN mkdir /var/data 没有什么不同。
不同之处在于,对于卷,目录/var/data
是不同(且更快)文件系统上的挂载点。您可以通过在容器中运行命令来见证这/var/data
不仅仅是另一个目录:mount
$ docker run --rm -v /var/data busybox mount
rootfs on / type rootfs (rw)
none on / type aufs (rw,relatime,si=6c354c296f850c3c)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,mode=755)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
/dev/mapper/vg0-root on /etc/resolv.conf type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/vg0-root on /etc/hostname type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/vg0-root on /etc/hosts type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/vg0-root on /var/data type ext4 (rw,relatime,errors=remount-ro,data=ordered)
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/irq type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/bus type proc (ro,nosuid,nodev,noexec,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,mode=755)
/
位于aufs分层(且速度较慢)的文件系统上
/var/data
位于ext4(和快速)文件系统上