- 数据卷
- 挂载目录
- 挂载文件
数据卷
参数的作用就是挂载一个文件目录到指定容器中去,实现容器中数据持久化。
数据卷是一个可以供一个或多个使用的特殊目录,它绕过UFS,可以提供很多有用的特性
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 卷会一直存在,直到没有容器使用
挂载目录
在使用docker run时,加上-v参数可以创建一个数据卷挂载到目标容器中去,也可以多次使用该参数挂载多个数据卷。下面创建一个容器,挂载一个数据卷。
$ sudo docker run --name=test -it -v /home/test_volume/:/home/test centos
[root@6a7818f6290b /]# cd /home/
[root@6a7818f6290b home]# ls
test
发现容器中已经成功挂载数据卷,但是如果你对系统是CentoOS7系统,你会发现,无法访问test,说明权限不够,是因为CentOS7中的安全模块selinux把权限禁掉了,所以要在运行的时候加上特权:
$ sudo docker run --name=test -it --privileged=true -v /home/test_volume/:/home/test centos
这样我们就有了对容器的读写权利。(解决方法还有好多种,在后面问题总结中有所介绍。)
Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro
training/webapp python app.py
注意:也可以在 Dockerfile 中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器。这将在仓库服务中详细讲解。
挂载文件
-v 标记也可以从主机挂载单个文件到容器中
$ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
这样就可以记录在容器输入过的命令了。
注意:如果直接挂载一个文件,很多文件编辑工具,包括 vi 或者 sed —in-place,可能会造成文件 inode 的改变,从 Docker 1.1 .0起,这会导致报错误信息。所以最简单的办法就直接挂载文件的父目录。