#### 命令挂载
语法:docker run –it –v /宿主机绝对路径目录:/容器内目录\[:权限\] 镜像名或镜像ID
![](https://img.kancloud.cn/de/11/de11ac1afa4ad4a86bf53a9be2047776_804x45.png)
可通过docker inspect 镜像名称或镜像ID查看镜像的详细信息
![](https://img.kancloud.cn/98/d8/98d89ec6ee3abf617d53c379f1f2915d_663x193.png)
容器和宿主机之间可以进行数据的共享
![](https://img.kancloud.cn/47/8e/478ef5c3a696c7da478bdf6587c7ae79_731x81.png)
比如说将上面的内容写入到/hostDataVolume中以后,我们在容器内也可以看到该文件
![](https://img.kancloud.cn/fc/f8/fcf8aab63e4e7d58340e7cd0d13ea67d_774x120.png)
此时我们查看容器内的/dataVolumeContainer目录,发现存在一个hostText的文件,并且文件内容是我上面通过重定向>写入的。
![](https://img.kancloud.cn/e8/ab/e8ab7550f6e69e0e1d8a395dd1142e8d_897x181.png)
我们在容器内向hostText文件追加了一个文本内容,此时通过宿主机查看hostText文件,发现也能看到该文本内容。(因为服务器不支持中文的原因,造成的部分字符乱码)
![](https://img.kancloud.cn/99/e7/99e748b61387519968bf2f14d3bd6b13_518x85.png)
此时说明**通过数据卷,可以实现宿主机和容器间的数据保存**
当容器停止退出后,如果宿主机的卷挂载目录文件有变动,重新启动容器后,容器内的卷挂载目录会和宿主机卷挂载目录的文件内容自动同步。
##### 带权限的挂载
![](https://img.kancloud.cn/07/e7/07e79cac2a2bfecbf97878381abcf317_758x44.png)
ro:Read-Only,中文意思就是只读
rw:Read,Write,可读可写
![](https://img.kancloud.cn/5b/b6/5bb6b7a93d8f4396ad75e76ee6183cea_385x194.png)
此时容器内**只能进行读操作,不能进行修改和写入**
![](https://img.kancloud.cn/41/95/4195b221cb05761b8b331ef6153cd03c_662x60.png)
##### 解决方案:Docker挂载主机目录Docker访问出现cannot open directory:Permission denied(未验证)
在挂载目录后加一个—privileged=true参数
如:docker run –it –v /宿主机目录绝对路径:/容器目录绝对路径 **–privileged=true** 镜像ID或镜像名称
#### Dockerfile添加数据卷
1. 根目录下新建docker文件夹并进入
![](https://img.kancloud.cn/2b/9d/2b9d74ae0019bddb7313f707a24ee548_354x30.png)
1. 在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
语法:
VOLUME\[“/dataVolumeContainer1”,”/dataVolumeContainer3”,”/dataVolumeContainer3”\]
说明:
出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
1. Dockerfile构建
\[root@izikh2x5epj8p6z docker\]# vi Dockerfile
\# 数据卷测试
\# 来自于哪个镜像
FROM centos
\# 数据卷名称1,数据卷名称2,...
VOLUME \["/dataVolumeContainer1","/dataVolumeContainer2"\]
\# 输出回显信息
CMD echo "finished,------>success"
\# 相当于 docker run -it -v /宿主机目录1:/dataVolumeContainer1 -v /宿主机目录2:/dataVolumeContainer2 centos /bin/bash
CMD /bin/bash
1. docker build构建Dockerfile文件,生成新镜像
语法:docker build –f Dockerfile文件位置 –t 新镜像名称 新镜像生成位置
![](https://img.kancloud.cn/4d/38/4d3834d3a53ed9954b48e42c8400837c_886x373.png)
通过docker images查询本地镜像信息,发现多了一个我们生成的gotojava/centos的镜像
![](https://img.kancloud.cn/c1/70/c17005892d62d0bbad47096ee36461f3_796x122.png)
1. Run我们已经生成的镜像
![](https://img.kancloud.cn/bb/25/bb25565e63a3787ed38f03f832e4606c_568x40.png)
查看镜像根目录,发现有两个数据卷1和数据卷2
![](https://img.kancloud.cn/7c/e0/7ce06c988c95c059639af0fe7302c0ef_819x85.png)
1. 查看数据源对应的主机位置
可以使用docker inspect 容器ID或容器名称查看容器中的数据卷和宿主机上对应的目录位置
![](https://img.kancloud.cn/68/1a/681a16c29b9bd9222736c94539b4184f_1096x415.png)
CentOS7下的默认地址为:
/var/lib/docker/volumes/bf72aebc25e62d53e54121d162085a663e78ffc9e188d58ee567c4f5edf7dc4f/\_data
- 什么是Docker
- 为什么会有Docker
- 虚拟技术的发展
- Docker的优势
- Docker的应用场景(能干什么)
- 获取Docker及文档资源
- Docker架构
- Docker工作原理
- 为什么Docker比虚拟机快?
- Docker的安装
- 前提条件
- 安装Docker Engine(Docker引擎)
- 程序员的入门经典之HelloWorld
- 卸载Docker引擎
- 配置镜像加速
- 解决方案:重新加载daemon.json文件后,重启服务出错
- Docker常用命令
- 帮助命令
- 镜像命令
- 常用容器命令
- Docker镜像
- 镜像是什么
- 镜像的特点
- docker commit // 镜像提交
- 运行一个Tomcat容器
- Docker容器数据卷
- 什么是容器数据卷
- 数据卷可以干嘛?
- 数据卷的挂载
- 数据卷容器
- Dockerfile
- 什么是Dockerfile
- Dockerfile构建镜像的流程
- Dockerfile的Demo(CentOS6.8)
- Dockerfile构建过程解析
- Dockerfile体系结构
- Dockerfile案例