zdq0394.github.com

Tech study and research.

Follow me on GitHub

Bind Mounts的使用

Docker很早就开始支持bind mounts。 与volumes相比,bind mounts功能有限。 使用bind mount,宿主机上的一个文件或者目录被mount到虚拟机中。宿主机上的文件或者目录通过的绝对路径引用。而使用volumes的话,Docker会在宿主机上的Docker storage directory(在linux上,/var/lib/docker/volumes)中创建一个新的目录,并且由Docker来管理这个空间。

Mount目录或者文件时,文件或者目录不必在宿主机上存在,但是父目录需要存在。

-v还是–mount

Docker 17.06以前,-v或者--volume在独立的容器上使用,--mount在services上使用。 从17.06开始,--mount也可以在独立的容器上使用。

-v或者–volume

包含三部分,冒号(:)分隔。

  • 宿主机上的文件或者目录路径。
  • 挂在到容器中的路径(文件或者目录路径)。
  • 可选的,volume的权限。可以由多个权限,由逗号分隔:ro, consistent, delegated, cached, z, and Z

–mount

包含多个key-value对,由逗号分隔。

  • type:mount类型(bind,volume或者tmpfs),这里是bind。
  • source: 或者src,宿主机上的文件或者目录路径。
  • destination:或者dst/target,容器中的挂载点。
  • readonly
  • bind-propagation:rprivate, private, rshared, shared, rslave, slave

Differences Between -v/–volume and –mount

如果在宿主机不存在对应的目录或者文件:

  • -v or –volume:自动创建目录
  • –mount:不会创建,生产一个error。

Bind Propagation

Bind propagation defaults to rprivate for both bind mounts and volumes。 只有在Linux宿主机上,也只有bind mounts才能设置propagation。