问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何将mongodb数据库docker化

发布网友 发布时间:2022-04-25 00:02

我来回答

1个回答

热心网友 时间:2022-04-07 20:13

步骤
Step1
你要拿到3台Docker服务器的IP地址,并且将下面给出的IP地址配置到所有的服务器上面,每一台服务器都要执行如下命令(记得要替换掉IP地址哦):
root@node *:/# export node1=10.11.32.174
root@node *:/# export node2=10.11.33.37
root@node *:/# export node3=10.11.31.176

理想情况下你并不需要这么做,这些IP都是可以通过DNS自动配置好的。但是这样会更加简单,毕竟这只是一次安装测试。
Step2
为每个节点创建密钥文件。在其中某一台服务器上面执行如下的命令,然后把密钥文件复制到其余两个服务器的同样的位置。
在这个教程中,我将把所有的东西都放在“/home/core”文件夹中。
root@node *:/# mkdir -p /home/core
root@node *:/# cd /home/core
root@node *:/# openssl rand -base64 741 > mongodb-keyfile
root@node *:/# chmod 600 mongodb-keyfile
root@node *:/# sudo chown 999 mongodb-keyfile

这个密钥文件的所有者被设置成id为“999”的用户了,因为在MongoDB的Docker容器中,这个用户需要有操作密钥文件的权限。
Step3
启动node1(即第一台Docker服务器)的MongoDB容器。它会启动一个没有身份验证机制的容器,所以我们要设置一个用户。
root@node1:/# docker run --name mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
--hostname="node1.example.com" \
-p 27017:27017 \
-d mongo:2.6.5 --smallfiles

现在创建一个admin用户。我们可以连接到刚刚启动的mongoDB容器,并进入一个交互式的shell环境.
root@node1:/# docker exec -it mongo /bin/bash

这时候,我们就进到MongoDB的Docker容器里面了,然后我们要打开一个mongo shell环境:
root@node1:/# mongo

上面的命令可以打开mongo shell环境。执行后你会看到这样的输出:
MongoDB shell version: 2.6.5
connecting to: test
Welcome to the MongoDB shell.For interactive help, type "help".For more comprehensive documentation, see
http://docs.mongodb.org/Questions? Try the support group
http://groups.google.com/group/mongodb-user>

切换到admin用户:
> use admin
switched to db admin

创建一个新的site admin 用户
> db.createUser( {
user: "siteUserAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]});

创建成功的话你会看到如下的成功信息:
Successfully added user: {"user" : "siteUserAdmin","roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
创建一个root用户:
> db.createUser( {
user: "siteRootAdmin",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]});

你会看到如下的成功信息:
Successfully added user: {
"user" : "siteRootAdmin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
我们已经创建好了我们以后要使用的几个用户,现在我们不会退出交互式shell环境(mongo和Docker容器的环境)。
> exit
bye
root@node1:/# exit

Step4
停止第一个MongoDB实例:
root@node1:/# docker stop mongo

Step5
这次使用密钥文件启动第一台MongoDB实例(还是在node1上面操作的)。
root@node1:/# docker rm mongo
root@node1:/# docker run \
--name mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
--hostname="node1.example.com" \
--add-host node1.example.com:${node1} \
--add-host node2.example.com:${node2} \
--add-host node3.example.com:${node3} \
-p 27017:27017 -d mongo:2.6.5 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet "rs0"

注意:
--keyFile的路径是/opt/keyfile/mongodb-keyfile,这是正确的。这是密钥文件在Docker内部的地址,我们用-v选项将密钥文件映射到容器内部的那个路径上(即:/opt/keyfile/mongodb-keyfile)。
--add-host把这些信息添加到Docker容器的/etc/hosts文件中,所以我们可以使用域名而不是IP地址了。在实际的生产环境中这些信息都是DNS,这些参数都可以忽略。
Step6
连接到副本集上并且安装配置好它。这还是在node1上面进行的。我们要开启另外一个新的交互式shell环境进入mongo容器,同时开启一个mongo shell环境:
root@node1:/# docker exec -it mongo /bin/bash
root@node1:/# mongo
MongoDB shell version: 2.6.5>

切换到admin用户下:
> use admin
switched to db admin

因为我们已经设置了一个密码,所以这次我们不得不做身份验证。我们把密码设置为:password。
> db.auth("siteRootAdmin", "password");1

现在我们可以开启副本集:
> rs.initiate(){
"info2" : "no configuration explicitly specified -- making one",
"me" : "node1.example.com:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1}>

Step7
验证已经初始化的副本集的配置:
>
rs0:PRIMARY> rs.conf(){
"_id" : "rs0",
"version" : 1,r
"members" : [
{
"_id" : 0,
"host" : "node1.example.com:27017"
}
]
}
Step8
在其余的两个节点启动MongoDB。
在node2上面执行命令:
root@node2:/# docker run \
--name mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
--hostname="node2.example.com" \
--add-host node1.example.com:${node1} \
--add-host node2.example.com:${node2} \
--add-host node3.example.com:${node3} \
-p 27017:27017 -d mongo:2.6.5 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet "rs0"

在node3上面执行命令:
root@node3:/# docker run \
--name mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
--hostname="node3.example.com" \
--add-host node1.example.com:${node1} \
--add-host node2.example.com:${node2} \
--add-host node3.example.com:${node3} \
-p 27017:27017 -d mongo:2.6.5 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet "rs0"

Step 9
将那两个节点加到副本集上。
回到node1节点,如果你在这里按了几次回车键(enter)的话,你会看到下面的提示:“rs0:PRIMARY”。这是因为这个节点是副本集“rso”的主节点。
rs0:PRIMARY> rs.add("node2.example.com")
rs0:PRIMARY> rs.add("node3.example.com")

我们可以通过执行下面的命令来验证其它两个节点是否正确的加到这个副本集当中:
rs0:PRIMARY> rs.status()

可能会花几分钟的时间来将node1上面的数据同步到其余的两个节点上面。你可以通过查看日志来观察每一个MongoDB的Docker容器里面发生了什么。在任意一个服务器上面执行下面的命令就可以了:
root@node*:/# docker logs -ft mongo
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
要一个带“长”字的成语 成语第二个字是长 预告登记有怎样的效力 ...他朋友借了三十万,现在还不出来,别人告他他会坐牢吗?我该不该借他... 欠网贷30万无力偿还,是否会坐牢? 寄快递什么意思 小配大出的小狗体型随谁狗狗生的小狗体型随谁 贝拉米奶粉最新事件有关于奶粉有问题的吗? 怀孕32周可以吃榴莲吗 榴莲的功效与作用 孕期31周能吃榴莲吗 邮件中怎么带图片呀? 怎么在邮箱里面直接收发图片,打开邮件直接看得到图片(不是用附件)? 如何用电子邮件发大量的图片 邮件怎么发图片.? 商家如何进行易宝支付结算?可不可以使用个人账户结算? 邮件中如何插入图片? 什么是电子邮件图片 支付结算工具主要有哪些?其适用范围分别是什么 发电子邮件 怎么让图片在正文里面显示 银行为什么要有那么多种类的支付清算系统? 发图片邮件怎么对方打不开呢? 为什么我的苹果手机会不定什么时候出现听筒外放刺刺拉拉的声音 几个创意拍照技巧,让你拍出时尚大片的感觉 巧妙 宅在家也能拍出创意照片,需要注意什么? 为什么酒店的特价房都在走廊尽头,靠近楼梯?我住了好几次酒店,都是这样。比如说如家酒店的特惠商务房。 酒店的特价房标准间2人每晚88元,三人间3人每晚108元.15人要住酒店,怎样住最省钱 创意摄影,都能拍哪些创意? 有的宾馆特价钟点房规定法定节假日和周末可以入住,那星期五可以住吗? 特价房为什么便宜? 有创意的摄影主题有哪些? 2022税收新政 docker 容器 部署的 mongodb 如何开启验证? 2012湖北省中小企业有什么最新的税收优惠政策? win10 环境下docker 怎么装 mongodb 怎样连接docker中的mongodb 湖北省高新技术企业可享受哪些税收优惠政策 docker运行mongodb数据怎么存储 湖北省最近期出台的大学生创业税收及贷款优惠政策,详细点。 如何定制docker image,同时包含nodejs和mongodb基础库 面试中,怎样巧妙回答你的缺点? 面试过程中,缺点应该怎么说如何写,更完美。 跟湖北境内的企业,有业务往来,增值税方面有什么优惠政策? 面试的时候如何优雅地说出自己的缺点? mongodb root用户能管理数据库吗 哪些疫情税收政策直到2021年上半年仍在延用? 面试怎样说缺点 linux 哪些桌面管理器 支持docker放在右边 高新技术企业增值税有什么优惠政策? ...16.04上使用Rancher部署Node.js和MongoDB应用程序 怎么面试的时候说自己的缺点和优点
  • 焦点

最新推荐

猜你喜欢

热门推荐