• 数据卷
    • 挂载目录
    • 挂载文件

    数据卷

    参数的作用就是挂载一个文件目录到指定容器中去,实现容器中数据持久化。

    • 数据卷是一个可以供一个或多个使用的特殊目录,它绕过UFS,可以提供很多有用的特性

      • 数据卷可以在容器之间共享和重用
      • 对数据卷的修改会立马生效
      • 对数据卷的更新,不会影响镜像
      • 卷会一直存在,直到没有容器使用
    • 挂载目录

    在使用docker run时,加上-v参数可以创建一个数据卷挂载到目标容器中去,也可以多次使用该参数挂载多个数据卷。下面创建一个容器,挂载一个数据卷。

    1. $ sudo docker run --name=test -it -v /home/test_volume/:/home/test centos
    2. [root@6a7818f6290b /]# cd /home/
    3. [root@6a7818f6290b home]# ls
    4. test

    发现容器中已经成功挂载数据卷,但是如果你对系统是CentoOS7系统,你会发现,无法访问test,说明权限不够,是因为CentOS7中的安全模块selinux把权限禁掉了,所以要在运行的时候加上特权:

    1. $ sudo docker run --name=test -it --privileged=true -v /home/test_volume/:/home/test centos

    这样我们就有了对容器的读写权利。(解决方法还有好多种,在后面问题总结中有所介绍。)

    Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。

    1. $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro
    2. training/webapp python app.py

    注意:也可以在 Dockerfile 中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器。这将在仓库服务中详细讲解。

    • 挂载文件

    -v 标记也可以从主机挂载单个文件到容器中

    1. $ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

    这样就可以记录在容器输入过的命令了。

    注意:如果直接挂载一个文件,很多文件编辑工具,包括 vi 或者 sed —in-place,可能会造成文件 inode 的改变,从 Docker 1.1 .0起,这会导致报错误信息。所以最简单的办法就直接挂载文件的父目录。