前言

折腾一些使用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. 重温jsp③

    Jsp详细   九大内置对象 Out jsp的输出流,用来向客户端响应 page 当前jsp对象!他的引用类型是object,即真身中有如下代码:object page=this: Session h ...

  2. WPF使用路径(URI)引用资源文件

    Uri uri = new Uri("pack://application:,,,/程序集名称;component/Resources/bj.png", UriKind.Absol ...

  3. docker cp 和docker exec 查看docker 运行的容器信息

    1. 使用docker 运行 redis 和 postgresql docker run -d -p : -v /redis/data/:/data redis docker run -d -p : ...

  4. OneZero第四周第四次站立会议(2016.4.14)

    1. 时间: 15:00--15:10  共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  5. SpringBoot 5.SpringBoot小知识讲解

    1.修改 server 端口: 在 application.properties 中添加 server.port=9090,我们的端口号就会变成9090了. 2.自定义配置Web: 2.1 创建 Cu ...

  6. 当数据库字段与model字段规则不一致时候 需要在xml里面手工转换

  7. How do you add? UVA - 10943(组合数的隔板法!!)

    题意: 把K个不超过N的非负整数加起来,使它们的和为N,有多少种方法? 隔板法...不会的可以买一本高中数学知识清单...给高中班主任打个广告.... 隔板法分两种...一种是不存在空集 = C(n- ...

  8. 51Nod 1175 区间中第K大的数 (可持久化线段树+离散)

    1175 区间中第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有 ...

  9. hdwiki 前后台版权信息在哪修改

    hdwiki 前台copyright 信息在 view/default/footer.htm 搜索footer-phdwiki 后台copyright 信息在 view/default/admin_m ...

  10. 【arc074e】RGB Sequence(动态规划)

    [arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...