前端学习 Docker 之旅(七)—— Docker 中安装 MongoDB

  最近在公司中,有个项目需要用到数据库,选择了尝试下 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
2
mkdir -p /mnt/docker/mongo
cd /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
2
use landingDB
db.auth('landing-user', 'landing-admin.1234')

6、创建表

1
2
db.createCollection('article')
db.createCollection('tag')

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
const { MongoClient } = require('mongodb')
const { host, port, dbName, username, password } = configObj
const url = `mongodb://${username}:${password}@${host}:${port}/${dbName}`

const client = new MongoClient(url)

// 初始化数据库链接
const initDB = async () => {
await client.connect()
console.log('Connected successfully to mongodb')
}

// 新增查询到的标签列表
const insertTags = async (tagList) => {
const db = client.db(dbName)
const collection = db.collection('tag')

const updateResult = await collection.updateMany({ isDelete: 0 }, { $set: { isDelete: 1, updateTime: getDateStr() } })
console.log('updateTags documents =>', updateResult)

const insertResult = await collection.insertMany(tagList)
console.log('insertTags documents =>', insertResult)
}

// 查询标签列表
const getTagList = async () => {
const db = client.db(dbName)
const collection = db.collection('tag')

const data = await collection.find({ isDelete: 0 }).toArray()
return {
code: 200,
data,
message: '成功',
}
}

module.exports = {
initDB,
insertTags,
getTagList,
}

附:前端学习 Docker 之旅(二)—— 常用指令

以上

随笔标题:前端学习 Docker 之旅(七)—— Docker 中安装 MongoDB

随笔作者:刘先玉

发布时间:2022年08月04日 - 10:51:23

最后更新:2022年08月04日 - 10:51:23

原文链接:https://liuxianyu.cn/article/docker-f.html