前言

折腾一些使用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

参考

docker之安装和管理mongodb的更多相关文章

  1. 在Docker中安装和部署MongoDB集群

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...

  2. Docker 快速安装&搭建 MongDB 环境

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  3. centos7.2安装及管理docker

    使用的操作系统是是centos7.2,按照官方的推荐的配置,把linux内核升级到3.8以上.安装步骤如下: 1.升级内核版本(包含aufs)cd /etc/yum.repos.dwget http: ...

  4. centos7 在docker下安装mongodb

    第一步:安装 1.1 查找(查看)mongo相应的版本 [root@localhost ~]# docker search mongo INDEX NAME DESCRIPTION STARS OFF ...

  5. Docker 一键安装及Docker管理面板Portainer中文汉化

       前言 Docker接触了一段时间了,批量操作过程中感觉太繁琐,所以找到了好评率比较高的Portainer面板,使用后感觉的确不错所以准备拿出来精力来做个汉化版,过程中发现词条非常多,所以暂时先汉 ...

  6. 在Docker中安装MongoDB

    在Docker中安装MongoDB docker run -p 27017:27017 -v /data/mongodb:/data/db --name mongodb -d mongo --auth ...

  7. Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

    Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

  8. docker下安装Redis

    Docker介绍 1.节约时间.快速部署和启动 2.节约成本 3.标准化应用发布 4.方便做持续继承 5作为集群中的轻量主机或节点 6.方便构建基于SOA或者微服务架构的系统 Docker中文文档 h ...

  9. 手把手教你 Docker Compose安装DOClever

    一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...

随机推荐

  1. 《Linux内核分析》课程第三周学习总结

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  2. @Autowire和@Resource注解的区别

    1.@Autowire是Spring开发的,而@Resource是jdk开发的 2.@Autowire是按照type来注解的,而@Resource是按照名称来的,如果名称找不到,那么就按照type,, ...

  3. Mininet入门与实战 3.9参课记录

    Mininet入门与实战 Mininet简介 由来:斯坦福大学发明,基于Linux Container架构开发的进程虚拟化网络仿真工具,交换机支持OF协议. 使用情况: 控制器,不推荐自带控制器(bu ...

  4. 在laravel中,使用DB查询数据库后,返回的对象,可以用下面的办法变为数组

    $nodes = Db::table('account')->orderBy('sort', 'asc')->orderBy('id' ,'asc')->get()->map( ...

  5. ajax调用后台webservice返回JSON字符

    后台代码: [WebMethod] public static string LoginTest(string userCode, string password) { UserManageCente ...

  6. Spring之AOP实现原理

  7. bzoj 1050 [HAOI2006]旅行comf (并查集)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 思路: 先将每条边的权值排个序优先小的,然后从小到大枚举每一条边,将其存到并查集 ...

  8. eclipse 安装报错

    14 11:17:13] ERROR: org.eclipse.equinox.p2.transport.ecf code=1002 Unable to read repository at http ...

  9. MT【78】几张动态图

  10. 【题解】 [HNOI2002]营业额统计 (Splay)

    懒得复制,戳我戳我 Solution: \(Splay\)板子题,注意可以选择相等大小 Code: //It is coded by Ning_Mew on 4.10 #include<bits ...