Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,我们使用Docker Compose来部署mongodb更方便快捷,也更容易方便管理。
首先需要在目标机器上安装Docker和Docker Compose。如果你已经安装过了,可以跳过这一步。
一、拉取Mongodb镜像
1.1 使用docker命令拉取Mongodb镜像
我这里版本4.0.27为例:
docker pull mongo:4.0.27
如果镜像下载失败,可离线下载到mongodb的镜像包mongo_4.0.27.tar.gz,然后上传到部署的服务器中使用**docker load -i ****<path/to/your/image.tar.gz>**命令来加载镜像包
docker load -i mongo_4.0.27.tar.gz
完成之后可使用docker images 命令查看docker中的镜像包
二、创建docker-compose.yml文件
2.1 创建mongodb目录
cd /usr/local
mkdir mongodb
2.2 创建yml相关文件
在mongodb目录中创建docker-compose.yml文件,.env文件,data目录
touch docker-compose.yml
touch .env
mkdir data
三、编写配置文件
编辑.env文件(.env文件用于存放mongodb的版本号)
vi .env
输入以下内容保存
mongo_v=mongo:4.0.27
编辑docker-compose.yml
version: '2.1'
services:
secondary:
image: ${mongo_v} #镜像版本号
container_name: master #镜像名称可自己定义
restart: always
ports:
- "0.0.0.0:27017:27017"
volumes:
- ./data:/data/db #数据目录挂载路径
command: mongod --dbpath /data/db --oplogSize 128 #mongodb基本配置,如需安全验证则在这里加 --auth表示登录mongo需要账号密码
四、启动Mongodb
需进入到docker-compose.yml的目录使用命令docker-compose up -d 启动
cd /usr/local/mongodb
docker-compose up -d
查看docker进程
docker ps 或 docker ps -a
查看docker启动Mongodb进程日志
使用命令docker logs -f 镜像ID 或 镜像名称 (查看指定200行日志 docker logs --tail 200 镜像ID 或 镜像名称)
docker logs -f master
docker logs --tail 200 master
master为yml中container_name:<name>值
进入moongo,使用docker exec -it <镜像ID或镜像名称> mongo
docker exec -it master mongo
五、安全验证
5.1 开启安全验证
在docker-compose.yml中配置安全验证在yml中 command: mongod --dbpath /data/db --oplogSize 128 后面加上--auth
version: '2.1'
services:
secondary:
image: ${mongo_v} #镜像版本号
container_name: master #镜像名称可自己定义
restart: always
ports:
- "0.0.0.0:27017:27017"
volumes:
- ./data:/data/db #数据目录挂载路径
command: mongod --dbpath /data/db --oplogSize 128 --auth
5.2 设置用户账号权限
可参考官方文档:What is MongoDB? — MongoDB Manual
连接到mongo之后
use test使用test集合
#创建test用户账号密码
db.createUser({
user:"admin_test", #设置账号
pwd:"test123456", #设置密码
roles:[ #权限设置
{role:"readWrite",db:"test"},
{role:"userAdmin",db:"test"}
]
})
role:[
不受访问限制的超级用户: root
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system
]]
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
2、查看用户权限
db.system.users.find().pretty()
db.getUsers();
3、删除用户权限
db.dropUser('admin_test')
更新用户的密码
db.changeUserPassword(用户名、密码)
4.查看所有数据库
>show dbs;
>db.user.getDB()
5.3 验证权限
在mongodb容器中使用db.auth("账号","密码")执行返回结果为1表示验证成功,否则失败
db.auth("admin_test","test123456")
版权归原作者 JJW1002 所有, 如有侵权,请联系我们删除。