docker中关于volume(mongo持久化为例)

说起docker持久化我们就肯定会想到volume
这篇文章主要讲两个知识点

  • docker运行镜像时进行持久化
  • docker自动创建的volume
  • 删除自动创建的volume

所用docker版本:
在这里插入图片描述
今天我在docker上拉取了一下mongodb,就顺便拿mongodb这个镜像来说明我发现的问题
拉取过程不再说了,直接运行我的mongo镜像

docker 运行镜像时进行持久化

注意:这里的持久化目录仅仅是mongo的持久化目录,不同镜像目录也会不同,这里只以mongo为例

docker run -d -p 27017:27017 -v /opt/docker/volume/mongo/db:/data/db -v /opt/docker/volume/mongo/config:/data/config --name mongo01 mongo:latest

启动后我们运行docker inspect mongo01,找到下边内容就说明我们持久化成功了,这两个目录会与我们容器中的数据保持一致,数据也就不会丢了,看到这里不要停,继续看你还会有收获
在这里插入图片描述

docker自动创建volume

但是我后来再次启动新容器时并没有进行挂载,但是我更改的数据在我重新启动docker后数据并没有变,这我就很奇怪了,我并没有进行持久化挂在呀,然后我就用docker volume ls进行查看,发现如下
在这里插入图片描述
这让我猜测到docker可能启动新容器时自动为我们创建了volume,图上的两个volume可能就是对应我的mongo config和db数据,接下来进行验证:
首先我仍然用docker inspect 新容器名查看我的信息,结果如下,也就是说这两个就是我的新容器的持久化挂载,而且文件是在我们的宿主机中,这更加证实了我的猜想:
在这里插入图片描述

我也听过docker要用命令进行持久化,难道我是新版的docker?然后我进入容器中(命令:docker exec -it 容器名 bash),使用mongo命令进入mongodb,然后对mongo进行如下操作,大致就是我创建了一个名为geo的collection
在这里插入图片描述
接下来就是印证持久化的重要作用之一:可以共享挂载数据。我执行如下命令再建一个容器(这次我是拿mongotest的自动创建的volume之一(以下这个是我觉得存db内容的volume),我是在volume所在文件夹下,所以没有用绝对路径)

docker run -d -p 27019:27017 -v adfabea14b0de580c2a4662610cdb173309529ce7fed263798bdfcea8e38d784:/data/db --name mongotest2 mongo:latest

启动后我们进入mongotest2的mongo中进行查看,可以看到我们看到了我们在mongotest中创建的collection,并通过共享volume共享给了新创建的mongotest2,猜想算是证实了
在这里插入图片描述
我们再看此时的volume list
在这里插入图片描述
可以看出第一行是多的,第二行就是我们上边共享的dbvolume,所以我猜第一行就是我们的mongotest2的config的持久挂载,当然可能不同镜像的挂载数量也不同吧,这里我只演示了mongo的,但重点是:docker自动为我们进行了持久化,而且我们也对持久化数据可以在容器间共享做了一下实践

删除自动创建的volume

docker自动创建的volume等容器删除后也不会进行删除,需要我们手动去删除,这里问题就出来了,我们怎么知道哪个volume是服务哪个容器,这个我目前还真没找到方法,当然如果容器存在可以用docker inspect命令,但容器不存在呢,这我们难道一个个排除得出哪volume服务的容器已经删除了?我们可以直接执行docker volume rm volume名称命令,如果该volume服务的容器还在就不能删除:
在这里插入图片描述
我们把容器删除再来看,就删除成功了:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jarbein

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值