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镜像去
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 默认没有用户,我们需要先创建一个用户。
首先我们需要执行以下命令
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实例怎么办?首先不要着急跑路?
没关系,我教你怎么重新挂载之前持久化的数据。
首先我们先插入一个文档,表明这个容器已经有数据了,
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数据库