1. 拉取MongoDB镜像
sh
docker pull mongo
2. 创建挂载目录
sh
mkdir -p /mydata/docker/mongodb-1/{conf,data,logs}
3. 创建配置文件
mongod.conf
sh
vi /mydata/docker/mongodb-1/conf/mongod.conf
配置文件内容:
sh
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
# mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mydata/docker/mongodb-1/logs/mongodb.log"
# 当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
# mongod实例存储其数据的目录。
dbPath: "/mydata/docker/mongodb-1/data"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
net:
# 服务实例绑定的IP,默认是localhost(多个ip用逗号分隔),0.0.0.0: 允许所有的 IP 地址连接
bindIp: 0.0.0.0
#绑定的端口,默认是27017
port: 27017
4. 启动MongoDB容器
sh
docker run \
-d \
--name mymongo \
-p 27017:27017 \
-v /mydata/docker/mongodb-1/data:/data/db \
-v /mydata/docker/mongodb-1/logs:/var/log/mongodb \
-v /mydata/docker/mongodb-1/conf/mongod.conf:/etc/mongod.conf \
mongo
5. 配置用户名和密码
- 进入容器,并配置
sh
docker exec -it mymongo /bin/bash
# 进入MongoDB控制台
mongo admin
# 查看数据库
show dbs
# 使用admin
use admin
# 创建系统超级管理员
db.createUser({user:'root',pwd:'root',roles:["root"]});
或
db.createUser({user:'root',pwd:'root',roles:[{role:"root", db:"admin"},'readWrite']});
# 创建普通管理员权限
db.createUser({user:'user',pwd:'root',roles:[{role:"userAdminAnyDatabase", db:"admin"}]});
# 创建普通用户,只对指定的数据库生效(readwrite:表示可读写)
db.createUser({user:'userdemo',pwd:'userdemo',roles:[{role:"readwrite", db:"对应权限数据库"}]});
如:
db.createUser({user:'userdemo',pwd:'userdemo',roles:[{role:"readwrite", db:"articledb"}]});
# 查看创建的用户
db.system.users.find()
# 删除用户
db.dropUser("root")
# 修改密码
db.changeUserPassword("用户名","密码")
如:
db.changeUserPassword("user","123456")
# 验证用户
db.auth('用户名', '密码')
如:
db.auth('root', 'root')
6. 开启认证
在配置文件中添加配置:mongod.conf
sh
security:
# 开启授权认证
authorization: enabled
注:
- 开启认证之后,客户端登录就必须要带上 用户名和密码了
7. 重启MongoDB容器
sh
docker restart mymongo
8. 开放防火墙端口
- 关闭防火墙端口
sh
firewall-cmd --permanent --remove-port=tcp/27017
- 重启防火墙
sh
firewall-cmd --reload
- 查询端口是否开放
sh
firewall-cmd --query-port=tcp/27017
- 也可以查看防火墙中开发的所有端口
sh
firewall-cmd --list-all