一、Volume

当我们在编写Dockerfile文件时,会有这么个语句VOLUME这个语句的意思就是在容器和宿主机中建立一个共享目录,也就是容器可以把数据保存到这个目录下。这也是docker中容器数据持久化保存的一种方式。

那么如何去使用这个Volume呢?我们先来做个小实验,这个实验是这样的,我们创建一个带有jdk的镜像,并与主机共享一个目录"/usr/mydata",然后把打包好的一个应用放在这个目录下,之后启动容器,并在这个目录下去运行应用,此时我们从容器中取创建一个文件,再回到宿主机中取查看当前文件是否创建成功,当我们删除这个容器之后,再看看文件是否存在。

第一步:创建镜像

FROM openjdk:8
LABEL author="cainiao1024"
VOLUME /usr/mydata
CMD []

容器依赖Java环境,然后指定一个共享目录,此时,docker build -t myvolume .就会构建好一个镜像

docker volume 路径 docker volume rm_学习


第二步:把准备好的Java应用复制到/usr/mydata目录下

第三步:启动容器,并执行当前的Java程序

docker volume 路径 docker volume rm_共享目录_02


如图所示,当我启动容器并执行我们添加好的应用,发现可以成功执行,说明当前挂载成功。

第四步:从容器中在共享目录下创建文件my.txt

docker volume 路径 docker volume rm_学习_03


此时回到,宿主机中的/usr/mydata目录下查看文件也创建好了

docker volume 路径 docker volume rm_docker volume 路径_04


我们再反向操作一下,在宿主机中创建一个host.txt文件并添加内容 hello volume,然后再回到容器中查看当前文件内容是否可以得到。

docker volume 路径 docker volume rm_共享目录_05


宿主机中已经创建好,此时在容器中查看,也可以得到文件内容

docker volume 路径 docker volume rm_docker volume 路径_06


第五步:删除容器,然后再重启,继续查看文件是否存在,重启后发现还是可以得到输出内容

docker volume 路径 docker volume rm_docker_07


经过以上认证,说明我们可以指定一个宿主机中的目录来保存容器中的数据,也可以把物理主机中的文件发送给容器。

注意: 在我们启动容器时需要指定-v参数 ,也就是指定宿主机中的目录和容器中的目录的对应关系

二、volume操作

Docker中也实现了对Volume的相关操作,可以使用docker volume指令来创建删除一个挂载点

docker volume 路径 docker volume rm_学习_08


实例:

docker volume 路径 docker volume rm_学习_09


创建了一个myvolume的挂载点,查看这个volume时发现他在宿主机中的"/var/lib/docker/volumes/myvolume/_data"目录下,所以我们可以把我们想要保存的或者发送的数据都可写作这个目录下进行操作。

三、总结

本文简单学习了关于Volume的相关知识,后续将进一步学习Docker中的其它知识。

以上,有任何不对的地方请指正,谢谢!