docker上安装mongodb并用数据卷持久化数据,删除容器实例后不要着急跑路,教你怎么恢复数据。 |
您所在的位置:网站首页 › 一个docker镜像运行多个实例文件怎么删除 › docker上安装mongodb并用数据卷持久化数据,删除容器实例后不要着急跑路,教你怎么恢复数据。 |
docker上安装mongodb并持久化数据,删除实例教你怎么恢复,不用跑路。
安装之前,先看一下docker的版本,用的最新版本20.10.8,几年前的安装方式和现在的也没啥区别,所以不用担心版本的问题。 .1 去 https://hub.docker.com/ docker官方镜像网站搜索mongo 在搜索结果中找到mongodb 拉取最新版本镜像 docker pull mongo控制台执行拉取命令,由于我已经装过就不再装了,直接执行此命令稍等一会便会拉取成功 docker pull mongo拉取成功后用docker images 查看是否拉取成功 docker images有mongo这个镜像,说明已经拉取成功了! 2.创建容器并持久化数据首先执行一条命令运行一个容器,并在运行的同时指定数据卷的目录,也就是把容器里面的数据映射到宿主机(持久化到容器之外), 为啥要创建数据卷持久化数据, 为啥要这样做? 不这样做也可以,但是如果有的程序员不小心误删了容器跑路了?怎么办? 如果不持久化的话,容器被删除,容器里的数据就会一并被删除,这样真的很可怕,所以最好要做持久化,这样删除了容器后数据卷的数据还存在本地,下次重新创建容器时候就可以重新挂载,也就是把本地数据复制到数据卷或者是直接读取本地的数据。 命令解析 docker run --name mymongo -p 27017:27017 -v /home/mongo/mymongo:/data/db -d mongo接下来看一下上面的命令,红线标的地方是需要你手动根据你需要更改的地方。 容器名字–name 后面跟的是你给该运行容器起的一个名字。我就起个mymongo了, 持久化数据卷-v 后面跟的是(本地持久化目录:容器内数据目录) /home/mongo/mymongo 是我电脑上的绝对路径,一定要是绝对路径,你可以自定义,不存在没关系,运行时候会自动创建。我就创建一个mymongo文件夹用来持久化保存这个容器的数据,容器和数据卷名字对应起来更方便 :data/db 是mongodb 容器内部的数据目录,mongodb本来产生的数据都是在这个内部目录的,这个是固定的,不需要变动。 端口映射-p端口,(服务器外部端口:容器内部端口),用ip地址访问,访问的就是服务器的外部端口,如果我们希望该容器运行的实例是在外部的27018端口,那么我们就需要27018:27017对应起来就可以,每一个mongodb的运行实例内部端口默认都是27017,所以根据自己情况自行设置端口。 执行命令后 返回了一个长串hash,说明已经成功了。 docker ps 查看运行实例 docker ps说明mymongo容器的实例正在运行中。 可以看到刚设置的目录已经有数据了,以后该实例产生的数据会持久化到这里, 进入容器 docker exec -it mymongo /bin/bash //mymongo 换成自己的容器名执行 mongo命令 mongo 默认没有用户,我们需要先创建一个用户。 首先我们需要执行以下命令 use admin //进入到admin数据库 //创建用户,user后跟数据库账号账户名,pwd 后跟账户密码,换成你自己的。 db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})可以看到两条命令都执行成功了。 连接mongo我用的是navicat,用刚创建的用户名和密码连接就好 到这里其实mongodb的持久化和运行已经完成了, 3.误删除mongo实例,重新挂载实例,并恢复数据万一误删除了mongo实例怎么办?首先不要着急跑路? 没关系,我教你怎么重新挂载之前持久化的数据。 首先我们先插入一个文档,表明这个容器已经有数据了, use mymongo //进入mymongo数据库 db.user.insert({"name":"zhangsan","age":18})//插入一条记录可以看到数据库已经有一条记录了。 接下来我们把运行的容器实例删了,重新恢复数据。 首先我们先退出容器,执行两次exit 就可以退出容器了,第一次退出mongo控制台,第二次退出容器 删除mongo实例 可以看到容器正在运行, 可以看到已经删除成功了! 可以看到已经连接不上mongo了 接下来我们就重新创建一个新的mongo实例挂载上一次删除的mongo实例的数据,为了区别上次的这次我们换个名字,换成mymongo1(名称随意,我这是测试为了区别),但是数据卷目录不能变还要加载上次删除的实例的数据卷/home/mongo/mymongo,端口我就不变了, docker run --name mymongo1 -p 27017:27017 -v /home/mongo/mymongo:/data/db -d mongo docker ps //查看运行容器实例这次试试 可以看到成功了,由于上次已经创建过用户了已经持久化保存了,这次就不需要创建了,直接用navicat 连接查看是否有数据 连接成功! 可以看到数据还在! 这样不管容器误删多少次,数据都依旧可以恢复。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |