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

时间:2014-10-24 21:46:27

标签: docker volumes

到目前为止,我真的只是将VOLUME理解为

的一种方式
  • 指定将持久的数据容器内的目录
  • 指定将链接到主机容器的位置

我无法理解的是为什么我看到有这么多Dockerfiles使用VOLUME /path/to/app甚至更差VOLUME /var/lib/mysql。我知道您可能想要创建具有此卷的容器,然后使用--volumes-from链接到该容器以实现持久性。但是为什么要在实际使用该数据的容器中制作该规范。它有什么用?据我所知,VOLUME /var/dataRUN mkdir /var/data无异。当卷不在数据容器内,与主机共享或被其他容器使用时,它们如何有益?

1 个答案:

答案 0 :(得分:1)

Docker镜像和Docker容器的分层文件系统很慢。通过将目录定义为数据卷,您可以将docker指定为let those directories outside of the slow layered file system。这带来了多重后果:

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

这就是为什么卷不仅是商品,而且是预期良好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 (和快速)文件系统