最近在公司中,有个项目需要用到数据库,选择了尝试下 MongoDB,记录下在 Docker 中安装 MongoDB 的过程。
¶一、安装 MongoDB
¶1、查找镜像
在 Docker Hub 官网查找自己需要的版本 https://hub.docker.com/_/mongo?tab=tags
¶2、下载镜像
我选择的是 6.0.2:
1 | docker pull mongo:6.0.2 |
¶3、创建挂载文件夹
1 | mkdir -p /mnt/docker/mongo |
¶二、运行 MongoDB
¶1、使用镜像创建容器并运行
1 | docker run -v /mnt/docker/mongo:/data/db --name mongodb -p 27019:27017 -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD='123456' -d mongo:6.0.2 --auth |
指令解释:
-v
挂载本地文件夹,存储数据--name
表示给容器指定的名称-p
表示端口映射,-p 宿主机port:容器port
,这里不使用相同端口是为了防止攻击-e
携带密码等参数-d
表示后台启动--auth
MongoDB 进行权限校验
¶2、进入容器
1 | docker exec -it mongodb mongosh admin |
注意
使用docker exec -it mongodb mongo admin
可能如果出现以下报错,mongodb 5.0 以上的版本需要使用mongosh
来代替mongo
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused “exec: “mongo”: executable file not found in $PATH”
¶3、验证用户名密码登录
返回 1 代表登录成功。
1 | db.auth('root', '123456') |
¶4、使用数据库
1 | use landingDB |
¶5、创建数据库的管理员
1 | db.createUser({ user: "landing-user", pwd: "landing-admin.1234", roles: [{ role: "readWrite", db: "landingDB" }] }) |
MongoDB 不允许同一窗口有多个用户登录,退出再次进入终端:
1 | use landingDB |
¶6、创建表
1 | db.createCollection('article') |
¶7、测试插入数据
1 | db.article.insert({ id: 1, title: '测试文章标题' }) |
¶8、通过 MongoDB Compass 连接数据库
1 | mongodb://landing-user:landing-admin.1234@127.0.0.1:27019/landingDB |
¶三、在 node 中使用
1 | const { MongoClient } = require('mongodb') |