使用docker-compose部署MongoDB
安装前准备
# 下载镜像
docker pull mongo:4.4.8-rc0-focal
# 在自己的Linux中新建一个mongo文件夹
mkdir ./mongo
# 创建docker-compose.yml 以及需要挂载的目录
cd ./mongo
touch docker-compose.yml
mkdir -p ./data/db
vi docker-compose.yml
version: '3.6'
services:
mongo:
restart: always
# build: .
image: mongo:4.4.8-rc0-focal
container_name: mongo
ports:
- 27017:27017
volumes:
# 数据目录 挂载出来后,即使删除容器,再用该挂载数据与docker-compose.yml文件启动容器,即可恢复到原来的数据以及用户信息
- ./data/db:/data/db
# 自定义数据备份目录,可以定时全量备份数据出来
- ./mybackup:/mybackup
- /etc/localtime:/etc/localtime
environment:
- TZ=Asia/Shanghai
# 缓存大小配置为使用 1.5GB , 考虑服务器中还有其他服务需要占用内存,可自定义大小
- wiredTigerCacheSizeGB=1.5
# --auth 开启权限认证 --noauth 关闭权限认证,找回密码时使用此配置重启服务
command: mongod --auth
启动/停止
# 启动
docker-compose up # 前台运行,退出即停止运行
docker-compose up -d # 后台运行
# 停止
docker stop mongo
# 删除容器以及网卡 挂载的数据目录还在,重新启动即可恢复
docker-compose down
配置admin数据库的root用户
# 进入容器
docker exec -it mongo bash
# 登陆mongo, 创建root,用户名可自定义,角色使用root
mongo
use admin
db.createUser( { user: "root", pwd: "123456", roles: [ { role: "root", db: "admin" } ] } )
# 登陆
db.auth("root", "123456")
# 查看当前数据库的用户
show users
创建业务数据库、用户
# 如果数据库不存在则自动创建
use im
# 创建dbOwner的用户,用于项目连接使用
db.createUser( { user: "imAdmin", pwd: "123456", roles: [ { role: "dbOwner", db: "im" } ] } )
# 创建read的用户,只有查询数据的权限,可分配给其他同事查看数据
db.createUser( { user: "imQuery", pwd: "123123", roles: [ { role: "read", db: "im" } ] } )
show users
连接验证(用户权限是否正常)
MongoDB 数据库默认角色说明
1. 数据库用户角色:read、readWrite
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
4. 备份恢复角色:backup、restore
5. 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
6. 超级用户角色:root
用户的其他操作
修改用户角色
# 此语句也可以用来修改用户其他信息
db.updateUser("testuser", {roles:[{role:"dbOwner", db:"testdb"}]})
修改密码
# 两种方式
db.updateUser('testuser', {pwd: '123123'})
db.changeUserPassword('testuser','123123')
删除用户
# 删除testadmin用户
db.dropUser('testadmin')
root用户,忘记密码怎么办
思路:由 auth 改为 noauth 模式重启,修改用户密码后,再恢复为auth模式重启即可;
具体过程:略