利用dockerfile挂载volume
**命令添加:**
> docker run -it -v /宿主机绝对路径目录:/容器内目录:permission mirrors_name(镜像名)
> 如果挂载的和要挂载的地方不存在。他会自己创建;permission: rw读写默认。ro只读
**dockerfile构建一个自带卷组的centos**
我们直接从`https://hub.docker.com/`里面搜索centos的dockerfile文件,自己改改,一会更改的内容我标识出来
```docker
[root@Docker mydocker]# cat dockerfile
FROM centos:latest
VOLUME ["/data_test1","/data_test2"]
CMD ["/bin/bash"]
```
这个dockerfile文件里面基于centos:latest(centos最新版)镜像构建一个我们自己挂载两个数据卷的镜像
```
build 一下把dockerfile变成镜像文件
[root@Docker mydocker]# docker build -f dockerfile -t volume_centos:1.3 .
Sending build context to Docker daemon 5.12 kB
Step 1/3 : FROM centos:latest ---先from基础镜像
---> 5182e96772bf
Step 2/3 : VOLUME /data_test1 /data_test2 ---然后创建两个数据卷volume
---> Running in c7204dcfe31c
---> b476ef88c68a
Removing intermediate container c7204dcfe31c
Step 3/3 : CMD /bin/bash ---执行了这个命令
---> Running in c3b1da0b8847
---> 2a3114e4b5bb
Removing intermediate container c3b1da0b8847
Successfully built 2a3114e4b5bb
```
这个时候我们可以使用docker images 来查看我们刚刚构建的镜像
```
[root@Docker mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
volume_centos 1.3 2a3114e4b5bb 5 minutes ago 200 MB
```
可以看出来我们刚才构建镜像已经成功了
我们现在来运行一下,看看它是否真的自动挂载两个数据卷volume了
```
[root@Docker mydocker]# docker run -it --name volume volume_centos:1.3
[root@d0021331d0d7 /]# ls
anaconda-post.log data_test1 dev home lib64 mnt proc run srv tmp var
bin data_test2 etc lib media opt root sbin sys usr
```
这个时候我们可以看出,在这个容器中的根目录下面已经生成来咱们刚才挂载的两个volume了。我们测试一下看能不能写内容进去
```
[root@d0021331d0d7 /]# touch /data_test{1,2}/test.txt
[root@d0021331d0d7 /]# ls /data_test{1,2}
/data_test1:
test.txt
/data_test2:
test.txt
```
可以看出我们能正常读写,但是这个数据卷挂载到本地的那个地方了呢?我们先ctrl+p+q不暂停退出这个容器去找一下
```
[root@Docker mydocker]# docker inspect volume
"Mounts": [
{
"Type": "volume",
"Name": "24799514bfafd7423aa56976fe34833b80db5e292c60d53fd2a1dda8cc187908",
"Source": "/var/lib/docker/volumes/24799514bfafd7423aa56976fe34833b80db5e292c60d53fd2a1dda8cc187908/_data",
"Destination": "/data_test1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "d46138dd071b0862ca674ec93832da67fda324d9d4970517d119af412af65e79",
"Source": "/var/lib/docker/volumes/d46138dd071b0862ca674ec93832da67fda324d9d4970517d119af412af65e79/_data",
"Destination": "/data_test2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
```
通过上面的source可以看出来挂载点是在自己本地的这个地方,我们去看看有没有刚才在容器里面写的数据在本地磁盘上
```
[root@Docker mydocker]# ls /var/lib/docker/volumes/d46138dd071b0862ca674ec93832da67fda324d9d4970517d119af412af65e79/_data
test.txt
[root@Docker mydocker]# ls /var/lib/docker/volumes/24799514bfafd7423aa56976fe34833b80db5e292c60d53fd2a1dda8cc187908/_data
test.txt
```
到此docker里面编写volume完成