文章最后更新时间:
简介:
MongoDB 是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
说明:
Docker如果想安装软件 , 必须先到Docker镜像仓库下载镜像。
1、寻找Mongo镜像


2、下载Mongo镜像
# 下载镜像
docker pull mongo
#查看镜像
docker images
命令 | 描述 |
---|---|
docker pull mongo | 下载最新版mongo镜像 (其实此命令就等同于 :docker pull mongo:latest ) |
docker pull mongo:4.4.27-rc0-windowsservercore-ltsc2022 | 下载指定版本的mongo镜像 (xxx指具体版本号) |

3、创建目录
一个用来存放配置,一个用来存储上传文件的目录,还有一个存放日志
启动前需要先创建Minio外部挂载的配置文件( /opt/mongo/config),和存储上传文件的目录( /opt/mongo/data),与日志目录(/opt/mongo/logs)
mkdir -p /opt/mongo/config
mkdir -p /opt/mongo/data
mkdir -p /opt/mongo/logs
touch /opt/mongo/config/mongod.conf

4、创建Redis容器并启动
4.1、运行前缀
# 先随便创建一个mongo容器,待会删除,主要为了获取mongod.conf文件内容
docker run --name mongo -d mongo
# 复制文件内容
docker cp mongo:/etc/mongod.conf.orig /opt/mongo/config/mongod.conf
#查询是否复制成功
cat /opt/mongo/config/mongod.conf

# 删除这个mongo容器
docker rm -f mongo
# 查询所有容器
docker ps -a

# 修改mongod.conf文件内容,让其可以实现远程访问
vim /opt/mongo/config/mongod.conf
# 内容如下
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:

4.2、开始部署
docker run -dit --name mongo \
-p 27017:27017 \
-v /opt/mongo/config/mongod.conf:/etc/mongod.conf.orig \
-v /opt/mongo/data:/data/db \
-v /opt/mongo/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
--restart=always \
--privileged=true \
mongo --auth
docker run --name mongodb -p 27017:27017 -v /opt/mongo/data:/data/db/ -v /opt/mongo/config/mongod.conf:/etc/mongod.conf.orig -v /opt/mongo/logs:/var/log/mongodb -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 --privileged=true --restart=always -td mongo
命令 | 描述 |
---|---|
docker run | 这是Docker的基本命令,用于从镜像启动一个新的容器。 |
-d | 这个选项使得容器在后台运行,并且进入分离模式。 |
-i | 这个选项使得容器在运行时保持交互式。 |
-t | 为容器分配一个伪终端或终端。 |
–name mongo | 为新创建的容器指定一个名字,这里是“mongo”。 |
-p 27017:27017 | 将宿主机的27017端口映射到容器的27017端口,这是MongoDB的默认端口。 |
-v /opt/mongo/config/mongod.conf:/etc/mongod.conf.orig | 将宿主机器上的 /opt/mongo/config/mongod.conf 文件挂载到容器的 /etc/mongod.conf.orig 位置。 |
-v /opt/mongo/data:/data/db | 将宿主机器上的/opt/mongo/data目录挂载到容器的/data/db目录。这是MongoDB的数据目录。 |
-v /opt/mongo/logs:/var/log/mongodb | 将宿主机器上的/opt/mongo/logs目录挂载到容器的/var/log/mongodb目录,用于存放MongoDB的日志文件。 |
-e MONGO_INITDB_ROOT_USERNAME=admin | 指定容器内的环境变量 初始化容器账号 |
-e MONGO_INITDB_ROOT_PASSWORD=123456 | 指定容器内的环境变量 初始化容器密码 |
–restart=always | 当容器退出时,系统会自动重启。 |
–privileged=true | 给予容器所有特权,这个选项可能会引起安全隐患。 |
–auth | 这个参数是MongoDB的参数,用于启动访问控制,即启用身份验证。 |
4.3、进入容器内部
# 如果MongoDB6.0及以上使用:
docker exec -it mongo /bin/mongosh
# 如果是6.0以下的版本使用:
docker exec -it mongo /bin/mongo

5、创建MongoDB用户
5.1、mongo中各个角色对应的权限
权限 | 说明 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用。超级账号,超级权限 |
5.2、创建一个用户,赋予用户root权限
注意:在createUser之前先use admin切换一下

5.2.1、然后执行创建用户命令

5.2.2、其他相关命令
# 更新用户角色,修改用户权限,不会覆盖原权限信息,只新增权限:
db.updateUser("admin",{roles:[{role:"readWrite",db:"admin"}]})
# 更新用户密码
db.changeUserPassword("admin","123456")
# 删除用户
db.dropUser({'admin'})
# 查看所有用户
show users
# 查看数据库(非admin数据库的用户不能使用数据库命令)
show dbs
6、连接 MongoDB
使用Navicat 连接mongoDB


7、解决Navicat连接Mongodb不显示数据库
7.1、问题由来
本以为连接上Navicat后就可以大展宏图了,结果没想到空空如也啊,心都凉了! 后面看到最下面有句提示:已隐藏3个系统项目:

7.2、解决方法
解决方法很简单,点击查看—勾选显示隐藏的项目:

然后就大功告成了
本文链接:https://lzphy.top/1457/© 版权声明
THE END
暂无评论内容