6.1 数据卷

数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。

数据卷可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;

  • 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;

  • 对数据卷的更新不会影响镜像,解耦开应用和数据;

  • 卷会一直存在,直到没有容器使用,可以安全地卸载它。

1. 创建数据卷

Docker提供了docker volume命令来管理数据卷,如下命令可以快速在本地创建一个数据卷:

$ docker volume create test
test

$ sudo ls -l /var/lib/docker/volumes
drwx-----x. 3 root root     19 10月 19 09:46 test

新建的数据卷位于/var/lib/docker/volumes路径下。

除了create子命令外,docker volume还支持inspect(查看详细信息)、ls(列出已有数据卷)、prune(清理无用数据卷)、rm(删除数据卷)等。

2. 绑定数据卷

除了使用dockers volume命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷

在用docker [container] run命令的时候,可以使用-mount选项来使用数据卷。-mount选项支持三种类型的数据卷,包括:

  • volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下;

    $ docker run -itd --name volume-test \
        --mount type=volume,source=test,destination=/opt/test ubuntu:18.04
  • bind:绑定数据卷,映射到主机指定路径下;

    $ mkdir -p /tmp/data  
    $ docker run -itd --name bind-test \
        --mount type=bind,source=/tmp/data,destination=/opt/test ubuntu:18.04

    上述命令等同于使用旧的 -v 标记可以在容器内创建一个数据卷:

    $ docker run -itd --name v-test \
        -v /tmp/data:/opt/test ubuntu:18.04

    其中,本地目录的路径必须是绝对路径,容器内路径可以为相对路径。如果目录不存在,Docker会自动创建。

    Docker挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读,加了ro之后,容器内对所挂载数据卷内的数据就无法修改了。

    $ docker run -itd --name v-test2 \
        -v /tmp/data:/opt/test:ro ubuntu:18.04

    --mount绑定的本地路径如果不存在会报错,并不会自动创建。

  • tmpfs:临时数据卷,tmpfs类型的数据卷,其中数据只存在于内存中,容器退出后自动删除。

    $ docker run -itd --name tmpfs-test \
        --mount type=tmpfs,destination=/opt/test ubuntu:18.04

Last updated