docker上安装mongodb并用数据卷持久化数据,删除容器实例后不要着急跑路,教你怎么恢复数据。

您所在的位置:网站首页 一个docker镜像运行多个实例文件怎么删除 docker上安装mongodb并用数据卷持久化数据,删除容器实例后不要着急跑路,教你怎么恢复数据。

docker上安装mongodb并用数据卷持久化数据,删除容器实例后不要着急跑路,教你怎么恢复数据。

2024-07-07 16:54| 来源: 网络整理| 查看: 265

docker上安装mongodb并持久化数据,删除实例教你怎么恢复,不用跑路。

安装之前,先看一下docker的版本,用的最新版本20.10.8,几年前的安装方式和现在的也没啥区别,所以不用担心版本的问题。

在这里插入图片描述

1.拉取docker官方mongodb镜像

.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容器的实例正在运行中。

可以看到刚设置的目录已经有数据了,以后该实例产生的数据会持久化到这里,

在这里插入图片描述

进入刚创建的mongo容器

进入容器

docker exec -it mymongo /bin/bash //mymongo 换成自己的容器名

在这里插入图片描述

执行 mongo命令

在这里插入图片描述

创建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实例

可以看到容器正在运行,

在这里插入图片描述

docker rm -f mymongo // -f 代表如果运行中也强制删除,mymongo换成你的容器名字。

在这里插入图片描述

可以看到已经删除成功了!

在这里插入图片描述

可以看到已经连接不上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