本文的目的是介绍docker之安装和管理mongodb的详细情况,特别关注docker安装mongodb的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解docker之
本文的目的是介绍docker之安装和管理mongodb的详细情况,特别关注docker 安装mongodb的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解docker之安装和管理mongodb的机会,同时也不会遗漏关于01.Docker安装MongoDB、32.Docker安装MongoDb、<二>docker 安装mongodb、Docker 下安装 Rockmongo,图形化操作 mongodb的知识。
本文目录一览:- docker之安装和管理mongodb(docker 安装mongodb)
- 01.Docker安装MongoDB
- 32.Docker安装MongoDb
- <二>docker 安装mongodb
- Docker 下安装 Rockmongo,图形化操作 mongodb
docker之安装和管理mongodb(docker 安装mongodb)
前言
折腾一些使用docker来配置和管理mongodb和mongodb集群。
安装mongodb
从docker网站拉取mongodb镜像
docker search mongo
# 选择一个版本
docker pull mongo:3.4
# 查看拉取的版本
docker images
配置相关参数
- 宿主机创建mongo文件夹
cd /mnt/
mkdir mongodb
cd ./mongodb
mkdir data # 放置数据文件
mkdir backup # 备份文件
mkdir conf # 配置文件
- 创建mongodb配置文件
# mongodb.conf
logappend=true
# bind_ip=127.0.0.1
port=27017
fork=true
noprealloc=true
auth=true
创建内部网络
docker network create tms
创建容器
docker run --name mongodb -v /mnt/mongodb/data:/data/db -v /mnt/mongodb/backup:/data/backup -v /mnt/mongodb/conf:/data/configdb -p 27018:27017 --network tms --network-alias mongodb -d mongo --auth
# 容器命名mongodb,数据库数据文件挂载到/mnt/mongodb/data,备份文件挂载到/mnt/mongodb/backup,启动的配置文件目录挂载到容器的/data/configdb,--auth开启身份验证。
# 如果想要使用配置文件启动mongodb,则执行自己的启动命令:
docker run --name mongodb -v /mnt/mongodb/data:/data/db -v /mnt/mongodb/backup:/data/backup -v /mnt/mongodb/conf:/data/configdb -p 27018:27017 --network tms --network-alias mongodb -d mongo mongod -f /data/configdb/mongodb.conf
记住:自己的mongod启动命令是在容器内执行的,因此使用的配置文件路径是相对于容器的内部路径。
之所以要挂载数据卷是为了便于直接对数据库数据进行读取以及备份的方便,当然也可以不挂载,挂载的主要目的一般是为了挂载应用的启动配置文件。
进入容器创建用户
docker exec -it mongodb bash
use admin
db.createUser({ # 先创建root用户
user:''admin'',
pwd:''123456'',
roles:[{role:''root'',db:''admin''}],
})
db.auth(''admin'',''123456'') # 认证
# 然后创建普通用户
退出容器后我们可以尝试在主机访问容器里的mongodb,如果出现如下错误:
Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18, codeName: "AuthenticationFailed" }
可能的一个原因是mongo的客户端版本太低,不支持认证操作,将mongo的客户端升级后再次尝试。
mongodb副本集
一个最小的副本集为3个成员,包括主节点,备节点和仲裁节点,如果没有仲裁节点,备节点是不会自动升级为主节点的。
创建mongodb节点
# 创建一个网络
docker network create tms
docker run --name m1 -p 27001:27017 --network tms --network-alias m1 -d mongo:3.4 --replSet mset --bind_ip 0.0.0.0
docker run --name m2 -p 27002:27017 --network tms --network-alias m2 -d mongo:3.4 --replSet mset --bind_ip 0.0.0.0
docker run --name m3 -p 27003:27017 --network tms --network-alias m3 -d mongo:3.4 --replSet mset --bind_ip 0.0.0.0
注意一定要将bind_ip设置成不是只有本地访问,否则副本集不能初始化成功。
配置节点
rs.initiate({ _id:"mset", members:[
{_id:0,host:"m1:27017",priority:2}, {_id:1,host:"m2:27017",priority:1}, {_id:2,host:"m3:27017",arbiterOnly:true}
]})
priority:设置优先级,数字越大优先级越高,优先级最高的是主节点
rs.status() # 查看状态
# 默认备份节点不能读写,可以设置
rs.slaveOk();
# 增加节点,需要进入主节点执行
rs.add(''ip:port'')
创建用户
use admin
db.createUser({
user:''admin'',
pwd:''123456'',
roles:[{role:''root'',db:''admin''}],
})
db.auth(''admin'',''123456'')
开启认证
如果需要开启认证,使用ssl的keyfile文件作为认证文件:
openssl rand -base64 666 > mongodb.key # 生成认证文件
chmod 600 mongodb.key # 设置执行权限
- 设置配置文件
# /mnt/mongodb/mconf/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0
systemLog:
logAppend: true
processManagement:
fork: false
security:
keyFile: "/data/configdb/mongodb.key"
clusterAuthMode: "keyFile"
authorization: "enabled"
replication:
replSetName: "mset"
secondaryIndexPrefetch: "all"
- 启动容器
docker run --name m1 -p 27001:27017 -v /mnt/mongodb/mconf:/data/configdb --network tms --network-alias m1 -d mongo:3.4 mongod -f /data/configdb/mongod.conf
docker run --name m2 -p 27002:27017 -v /mnt/mongodb/mconf:/data/configdb --network tms --network-alias m2 -d mongo:3.4 mongod -f /data/configdb/mongod.conf
docker run --name m3 -p 27003:27017 -v /mnt/mongodb/mconf:/data/configdb --network tms --network-alias m3 -d mongo:3.4 mongod -f /data/configdb/mongod.conf
参考
-
https://www.missshi.cn/api/view/blog/5a86a5f2c55cb01126000002
-
https://my.oschina.net/robinyao/blog/469431
-
https://www.cnblogs.com/clsn/p/8214345.html # 系统知识
01.Docker安装MongoDB
- 查询MongoDB镜像
docker search mongo
- 拉取MongoDB镜像
docker pull mongo
# 拉取指定版本镜像
docker pull mongo:3.4
- 启动MongoDB容器
docker run -p 27017:27017 --name mymongo -d mongo
- 进入MongoDB交互模式
docker exec -it <CONTAINER NAME> mongo admin
32.Docker安装MongoDb
从hub.docker.com上去找镜像
阿里云的国内的镜像地址
填上去之后,然后重启下docker就可以了
docker images列出本地的镜像
拉取mango的镜像
运行这个镜像
docker logs mymango:查看镜像名称为mymango的镜像的日志
docker start mymango:启动名称为mymango的镜像
错误可能是27016这个端口被占用了
netstat -aon查看本地运行的端口
查看运行端口的8025的:netstat -aon|findstr "8025"
删除容器:docker rm mymango.
然后docker ps -a:查看镜像
再次创建,使用27017去创建
解决问题
docker的网络 之前博主自己禁用掉了。所以就映射不起来。网络之间有桥接的映射
退出docker再重新打开
刚才mango下载不下来也是由于网络没有启动起来的关系
docker pull mango:重新去下载mango
docker ps正在运行的
Robo 3T去连接mango db
注意docker里面暴露的端口
这样我们就在本地创建了mango
关闭mango01:docker stop mango01
再去链接就会提示连接 不上
启动mango01:docker start mango01
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
<二>docker 安装mongodb
1、拉取 Docker Hub 上的所有 mongo 镜像
docker pull mongo
2、查看下Mongo的镜像
docker images | grep mongo
3、使用过docker run命令,运行镜像,生成容器
docker run --name my-mongo -p 27017:27017 -d mongo docker ps 查看 已经生成的镜像
4、设置mongodb的admin数据库账户和密码
进入容器的服务内部,可设置帐号
docker exec -it my-mongo mongo admin
将当前上下文切换到admin数据库
use admin;
执行下列添加账户密码的命令,并退出
db.createuser({ user: 'admin', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); exit
5、重启mongodb
docker stop my-mongo docker start my-mongo
6、下载mongoDb可视化工具 Robo3T,下载地址可以是官网:https://robomongo.org/download.
安装就不说了,一路next就行了。
然后点击file->connection 输入地址,后点击test尝试连接,出现如下图情况即连接成功。
7、如果是使用的阿里云的服务器,那么需要自己去打开27017这个端口,默认是关闭的
Docker 下安装 Rockmongo,图形化操作 mongodb
RockMongo 是个 web 版的 MongoDB 管理工具,相比原始的命令行操作,RockMongo 的图形化界面大大的提升的我们的工作效率,本章我们在 Docker 下搭建一个 Mongodb 集群环境,再装一个 RockMongo,用来操作新建的数据库;
有关安装 Mongodb 集群环境的详情,请参照《Docker 下,实战 mongodb 副本集(Replication)》一文;
Mongodb 镜像选择
Mongodb 镜像选用 bolingcavalry/ubuntu16-mongodb349:0.0.1,这是我自己制作的 mongodb 的镜像,已经传到 hub.docker.com 网站,可以通过 docker pull bolingcavalry/ubuntu16-mongodb349:0.0.1 命令下载使用,关于此镜像的详情请看《制作 mongodb 的 Docker 镜像文件》;
Rockmongo 镜像选择
Rockmongo 的镜像我选用了 javierjeronimo/rockmongo:latest,这是 hub.docker.com 上被 pull 次数较多的镜像,作者公开了 Dockfile 脚本,有兴趣的读者可以自己动手构建一下,脚本地址:https://hub.docker.com/r/javierjeronimo/rockmongo/~/dockerfile/
环境信息
我们要启动四个容器:Mongodb 集群和 Rockmongo Server:
容器名 | ip | 备注 |
---|---|---|
ma | 172.19.0.2 | Primary |
mb | 172.19.0.3 | Secondary1 |
mc | 172.19.0.4 | Secondary2 |
rockmongo | 172.19.0.5 | 管理 server |
网络情况如下图所示:
docker-compose.yml 配置
从上图得知我们要启动四个容器:Mongodb 集群和 Rockmongo Server,所以用 docker-compose 批量管理比较方便,docker-compose.yml 内容如下:
version: ''2''
services:
ma:
image: bolingcavalry/ubuntu16-mongodb349:0.0.1
container_name: ma
command: /bin/sh -c ''mongod --replSet replset0''
restart: always
mb:
image: bolingcavalry/ubuntu16-mongodb349:0.0.1
container_name: mb
depends_on:
- ma
command: /bin/sh -c ''mongod --replSet replset0''
restart: always
mc:
image: bolingcavalry/ubuntu16-mongodb349:0.0.1
container_name: mc
depends_on:
- mb
command: /bin/sh -c ''mongod --replSet replset0''
restart: always
rockmongo:
image: javierjeronimo/rockmongo:latest
container_name: rockmongo
depends_on:
- mc
ports:
- "8088:80"
links:
- ma:mongodba
restart: always
如上述 yml 脚本所示,ma、mb、mc 这三个容器组成了副本集集群,rockmongo 容器启动后,/etc/hosts 文件中有了 ma 的 ip 配置 (links 属性);
启动所有容器
在 docker-compose.yml 文件所在目录下,执行以下命令即可创建所有容器:
docker-compose up -d
启动效果如图所示:
配置集群
- 执行 docker exec -it ma /bin/bash 进入 ma 容器,执行 mongo 进入 mongodb 控制台;
- 执行 use admin, 使用 admin 数据库;
- 执行以下命令,配置机器信息,其中的 use replset0 是启动 mongodb 时候的–replSet 参数,定义副本集的 id:
config = { _id:"replset0", members:[{_id:0,host:"172.19.0.2:27017"},{_id:1,host:"172.19.0.3:27017"},{_id:2,host:"172.19.0.4:27017"}]}
控制台输出如下:
> use admin
switched to db admin
> config = { _id:"replset0", members:[{_id:0,host:"172.19.0.2:27017"},{_id:1,host:"172.19.0.3:27017"},{_id:2,host:"172.19.0.4:27017"}]}
{
"_id" : "replset0",
"members" : [
{
"_id" : 0,
"host" : "172.19.0.2:27017"
},
{
"_id" : 1,
"host" : "172.19.0.3:27017"
},
{
"_id" : 2,
"host" : "172.19.0.4:27017"
}
]
}
>
可见三个机器都已经加入集群;
4. 执行 rs.initiate(config) 初始化配置;
5. 执行 rs.status() 查看状态,得到输出如下:
replset0:PRIMARY> rs.status()
{
"set" : "replset0",
"date" : ISODate("2017-10-14T15:00:54.417Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "172.19.0.2:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1855,
"optime" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-10-14T15:00:51Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1507993190, 1),
"electionDate" : ISODate("2017-10-14T14:59:50Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "172.19.0.3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 74,
"optime" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-10-14T15:00:51Z"),
"optimeDurableDate" : ISODate("2017-10-14T15:00:51Z"),
"lastHeartbeat" : ISODate("2017-10-14T15:00:52.494Z"),
"lastHeartbeatRecv" : ISODate("2017-10-14T15:00:53.380Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "172.19.0.4:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "172.19.0.4:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 74,
"optime" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1507993251, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-10-14T15:00:51Z"),
"optimeDurableDate" : ISODate("2017-10-14T15:00:51Z"),
"lastHeartbeat" : ISODate("2017-10-14T15:00:52.494Z"),
"lastHeartbeatRecv" : ISODate("2017-10-14T15:00:53.374Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "172.19.0.2:27017",
"configVersion" : 1
}
],
"ok" : 1
}
replset0:PRIMARY>
可以看到三个容器都已经加入集群,并且 ma 是 Primary;
添加数据
在 ma 的 mongodb 控制台执行以下命令,创建数据库 school 并往集合 student 中新增三条记录:
use school
db.student.insert({
name:"Tom", age:16})
db.student.insert({
name:"Jerry", age:15})
db.student.insert({
name:"Mary", age:9})
到这里,mongodb 的集群环境已经配置好了,并且数据库 school 中也添加了一个集合 student,里面存了三个文档,接下来我们该配置 Rockmongo 了;
配置 Rockmongo
退出 ma 容器,执行 docker exec -it rockmongo /bin/bash 进入 rockmongo 容器;
进入 rockmongo 容器后,用 vi 打开 /app/config.php 文件,找到下面红框中的代码:
上图红框中的两个配置分别是数据库名称和 mongodb 的 IP,分别改成”school” 和”mongodba”(因为在 docker-compose.yml 中配置了 link,所以此处用 link 的配置就行,不用写 ma 容器的 IP 了),改动后的部分如下图所示:
登录和体验 RockMongo
- 打开浏览器,输入 http://localhost:8088,看到 rockmongo 的登录页面,如下图:
如上图红框所示,默认选中的数据库就是我们刚刚改的”school”,用户名密码都是 admin,输入后可以进入 RockMongo 系统;
2. 进入系统后看到的页面如下图所示:
如上图,数据库 school 的集合 student 中的文档数据全部可以看见了;
3. 我们来试试在 RonckMongo 系统中执行查询,如下图,在输入框输入 font color=”blue”>{age:{$lt:10}},点击下面的 “执行”,就能看到查询结果:
至此,Docker 下安装和体验 Rockmongo 就实战完毕了,希望读者们多尝试和体验这个工具,用来在实际工作中提升效率;
本文分享 CSDN - 程序员欣宸。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。
关于docker之安装和管理mongodb和docker 安装mongodb的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于01.Docker安装MongoDB、32.Docker安装MongoDb、<二>docker 安装mongodb、Docker 下安装 Rockmongo,图形化操作 mongodb的相关知识,请在本站寻找。
本文标签: