前言

折腾一些使用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. OpenState: Programming Platform-independent Stateful OpenFlow Applications Inside the Switch

    文章名称:OpenState: Programming Platform-independent Stateful OpenFlow Applications Inside the Switch Op ...

  2. ElasticSearch 2 (4) - API Convention

    ElasticSearch 2.1.1 (4) - API Convention The elasticsearch REST APIs are exposed using JSON over HTT ...

  3. css3-文本新增属性

    rgba:a是设透明度值 应用:background:rgb(255,255,255,0.5) color:rgb(255,255,255,0.5) border:1px solid rgb(255, ...

  4. 蜗牛慢慢爬 LeetCode 16. 3Sum Closest [Difficulty: Medium]

    题目 Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  5. CentOS 修改时区的方法

    study from https://blog.csdn.net/skh2015java/article/details/85007624 第一种 tzselect 输入命令直接选择即可 第二种,直接 ...

  6. Postgresql迁移数据文件存放位置

    1. POSTGRESQL的安装 centos7 里面默认的pgsql的版本是 如果想用更高的版本需要执行以下如下的命令 rpm -ivh https://download.postgresql.or ...

  7. stylus-loader (copy)

    https://blog.csdn.net/xqnode/article/details/59777793 "stylus-loader": "^2.5.0", ...

  8. SSR & Next.js & Nuxt.js

    SSR & Next.js & Nuxt.js Server Side Rendering https://nextjs.org/ https://nuxtjs.org/ SSR &a ...

  9. 深入理解ajax系列第七篇——传递JSON

    前面的话 虽然ajax全称是asynchronous javascript and XML.但目前使用ajax技术时,传递JSON已经成为事实上的标准.因为相较于XML而言,JSON简单且方便.本文将 ...

  10. HUAS 2018暑假第一周比赛-题解

    小朋友们有问题评论区 :) B. 子串计算 难度系数 : ☆ Main idea : 模拟 暴力 按照题目的要求一步一步来就行了 之所以可行的原因是从左往右扫,如果扫到一个子串,把它删除掉之后,假设当 ...