持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
上一节,我们知道了怎么使用docker简单构建一个我们自己镜像并且运行这个镜像。
我们都知道,docker容器一旦被删掉,然后重新通过镜像去运行容器,那么之前保存在容器里的文件都会发生丢失。如果,有这样一个场景,我们的项目需要永久化存储,不管容器是否被删,文件都会保存下来,下次重新通过镜像构建容器,还是能够加载到这些文件,那么应该怎么做呢?
答案就是 挂载卷
那么如何在运行的时候,将宿主机器的目录挂载在容器内呢?
可以使用-v参数进行指定:-v /root/lomtom/demo-gin/volume:/test,这里将宿主机器的/root/lomtom/demo-gin/volume目录挂载在容器的/test目录下,这样在容器内就可以访问到宿主机器的/root/lomtom/demo-gin/volume目录。
[root@master demo-gin]# docker run -p 3001:8080 -v /root/lomtom/demo-gin/volume:/test -d demo-gin
在宿主机器中的/root/lomtom/demo-gin/volume添加一个test.txt文件,内容为 are you happy today?
[root@master volume]# cat /root/lomtom/demo-gin/volume/test.txt
are you happy today?
回到容器中进行查看,发现/test下存在一个test.txt文件。
/ # cat test/test.txt
are you happy today?
这就是Docker 的Volume 机制,允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作。
除此之外,也可以不指定宿主机器的目录。
[root@master demo-gin]# docker run -p 3001:8080 -v /test -d demo-gin
容器启动之后,可以查看volume的信息
[root@master volume]# docker volume ls
DRIVER VOLUME NAME
local 4605aba6ab35518ce29fc650e75c157d3c4b95451123a9687d93eed5cf6be6b8
容器内/test目录下的文件就会保存在宿主机器的/var/lib/docker/volumes/4605aba6ab35518ce29fc650e75c157d3c4b95451123a9687d93eed5cf6be6b8/_data/中。
值得注意的是,如果使用该容器重新构建一个镜像,容器 Volume 里的信息,并不会被 docker commit 提交掉;但这个挂载点目录 /test 本身,则会出现在新的镜像当中。
下一节,我们将从docker镜像本身出发,去理解docker镜像的原理。