docker之安装和管理mongodb

前言

折腾一些使用docker来配置和管理mongodb和mongodb集群。html

安装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启动命令是在容器内执行的,所以使用的配置文件路径是相对于容器的内部路径。mongodb

之因此要挂载数据卷是为了便于直接对数据库数据进行读取以及备份的方便,固然也能够不挂载,挂载的主要目的通常是为了挂载应用的启动配置文件。docker

进入容器建立用户

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的客户端升级后再次尝试。api

mongodb副本集

一个最小的副本集为3个成员,包括主节点,备节点和仲裁节点,若是没有仲裁节点,备节点是不会自动升级为主节点的。bash

建立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文件做为认证文件:app

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

参考

相关文章
相关标签/搜索