Docker安装使用之安装(六)之安装MongoDB

Docker安装MongoDB简单版

docker安装mongodb并设置开机自启
默认安装最新版本

第一步:[root@localhost ~]# docker pull mongo
mongodb 名称

第二步: [root@localhost ~]#  docker run --name mongodb -p 27017:27017 -d mongo

开机自启
第三步: [root@localhost ~]#  docker update mongodb --restart=always

Docker复杂安装MongoDB使用数据卷持久化数据  

拉取docker官方mongodb镜像去

 https://hub.docker.com/ docker  

官方镜像网站搜索mongo


在搜索结果中找到mongodb

拉取最新版本镜像

docker pull mongo


 

控制台执行拉取命令,由于我已经装过就不再装了,直接执行此命令稍等一会便会拉取成功

docker pull mongo

 

拉取成功后用docker images 查看是否拉取成功

docker images


有mongo这个镜像,说明已经拉取成功了!

创建容器并持久化数据

首先执行一条命令运行一个容器,并在运行的同时指定数据卷的目录,也就是把容器里面的数据映射到宿主机(持久化到容器之外),

为啥要创建数据卷持久化数据,
​ 为啥要这样做?

​ 不这样做也可以,但是如果有的程序员不小心误删了容器跑路了?怎么办?

​ 如果不持久化的话,容器被删除,容器里的数据就会一并被删除,这样真的很可怕,所以最好要做持久化,这样删除了容器后数据卷的数据还存在本地,下次重新创建容器时候就可以重新挂载,也就是把本地数据复制到数据卷或者是直接读取本地的数据。

命令解析

docker run --name mymongo -p 27017:27017 -v /home/mongo/mymongo:/data/db -d mongo
或
在服务器创建一个目录 用来存储数据做数据持久化
mkdir -p /root/docker_volume/mongodb/data
docker run -itd --name mongodb -v /root/docker_volume/mongodb/data:/data/db -p 1245:27017 mongo --auth
参数说明:
-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 1245(可自己改,这里改成不一致的,避免遭到黑客攻击) 端口。外部可以直接通过 宿主机 ip:12345访问到 mongo 的服务。
--auth:需要密码才能访问容器服务,启动容器后进入容器为用户设置密码

接下来看一下上面的命令,红线标的地方是需要你手动根据你需要更改的地方。

容器名字
–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'}]})
或者
docker exec -it mongodb mongo admin
创建一个名为 admin,密码为 123456 的用户。
> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123456')

可以看到两条命令都执行成功了。

误删除mongo实例,重新挂载实例,并恢复数据

万一误删除了mongo实例怎么办?首先不要着急跑路?

没关系,我教你怎么重新挂载之前持久化的数据。

首先我们先插入一个文档,表明这个容器已经有数据了,

use mymongo //进入mymongo数据库
db.user.insert({"name":"zhangsan","age":18})//插入一条记录

接下来我们把运行的容器实例删了,重新恢复数据。

首先我们先退出容器,执行两次exit 就可以退出容器了,第一次退出mongo控制台,第二次退出容器

  

删除mongo实例

可以看到容器正在运行,

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

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

 接下来我们就重新创建一个新的mongo实例挂载上一次删除的mongo实例的数据

docker run --name mymongo -p 27017:27017 -v /home/mongo/mymongo:/data/db -d mongo
docker ps //查看运行容器实例

这次试试

在这里插入图片描述

 mongo命令今日mongodb

进行查看

use mymongo //进入mymongo数据库
db.mymongo.find();#查看mymongo数据库

  

posted @ 2022-07-12 16:38  永远爱芒果  阅读(1015)  评论(0编辑  收藏  举报