没有链接的Docker卷。 什么是用例?

到目前为止,我只是把VOLUME理解为一种方法

  • 在数据容器中指定一个目录,这个目录将是持久的
  • 指定将链接到您的主机容器的位置

我不明白的是为什么我看到很多使用VOLUME /path/to/app或更差的VOLUME /var/lib/mysql Docker文件。 我知道你可能想要创build一个具有这个卷的容器,然后使用--volumes-from来链接到该容器以进行持久化。 但是,为什么要在实际使用该数据的容器内制定该规范? 它如何帮助? 据我所见, VOLUME /var/data与仅仅说RUN mkdir /var/data没有什么不同。 如果卷不在数据容器内,与主机共享或被其他容器使用,卷是如何有益的?

Docker镜像和Docker容器有一个很慢的分层文件系统。 通过将目录定义为数据卷,您可以指示docker将这些目录放在慢分层文件系统之外 。 这是其中的多重后果,其中:

  • 快速的文件系统
  • 在多个容器之间共享容量的能力
  • 持久性(只要存在至less一个使用该卷的容器)

这就是为什么卷不仅是一种商品,而且是预期具有良好I / O性能的目录的必要条件。


据我所见,VOLUME / var / data与仅仅说RUN mkdir / var / data没有什么不同。

不同的是,对于卷,目录/var/data是不同(更快)的文件系统上的挂载点。 您可以通过在容器中运行mount命令来目睹/var/data不只是另一个目录:

 $ 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/dataext4 (和快速)文件系统上