Docker(三)安装 MongoDB

2021/3/10 dockermongo

MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序。


# 1. 查看可用的 MongoDB 版本

访问 MongoDB 镜像库地址 (opens new window)

还可以用 docker search mongo 命令来查看可用版本,默认是最新版本 mongo:latest

# 2. 拉取 MongoDB 镜像

拉取官方镜像(我们这里选择 4.2.13,如果不写后面的版本号则会自动拉取最新版)

docker pull mongo:4.2.13 # 拉取 mongodb4.2.13
docker pull mongo        # 拉取最新版mongodbl镜像
1
2

# 3. 查看本地镜像

检查是否拉取成功

docker images
1

# 4. 运行容器

镜像安装完成后,我们可以使用以下命令来运行 mongo 容器:

docker run --name mongo4.2 -p 27017:27017 \
-v /usr/local/docker/mongodb/data:/data/db \
-d --restart=always \
mongo:4.2.13
1
2
3
4

也可以重命名容器对象

docker rename reverent_mestorf mongo4.2
1

也可以设置容器自动重启

docker container update --restart=always 容器名字
1

# 5. 安装成功

检查容器是否正确运行

docker ps
或 docker container ls
1
2
  • 可以看到容器 ID,容器的源镜像,启动命令,创建时间,状态,端口映射信息,容器名字

# 6. 连接 mongodb

  1. 进入 docker 容器,然后进入 admin 数据库

    docker exec -it mongo4.2 bash
    
    1
  2. 也可以简写成这样

    docker exec -it mongo4.2 mongo admin
    
    1
  3. 使用远程连接软件时要注意一个问题

# 7. 创建用户

MongoDB 采用**基于角色的访问控制(RBAC)**来确定用户的访问。 授予用户一个或多个角色,确定用户对 MongoDB 资源的访问权限和用户可以执行哪些操作。 用户应该只有最小权限集才能确保最小权限的系统。 MongoDB 系统的每个应用程序和用户都应该映射到不同的用户。 这种访问隔离便于访问撤销和持续的用户维护。

创建管理员账号(拥有所有权限)

> db.createUser({
     user: 'root',
     pwd: 'admin',
     roles: [{ role: 'userAdminAnyDatabase', db: 'mydb' }],
 })

SuccessFully added user:{}
1
2
3
4
5
6
7

开启身份验证

> db.auth('root', '123456')
1 // 代表授权验证成功
1
2

添加数据库用户

> use mydb
> db.createUser({
	 user: 'root',
	 pwd: '123456',
	 roles: [{ role: 'readWrite', db: 'mydb' }],
 })
> db.auth('root', '123456')
1
2
3
4
5
6
7

列出数据库的所有用户

> db.getUsers()
1

删除数据库用户

> db.dropUser('用户名')
true
1
2

# 8. 权限

权限由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成。

  1. 资源(resource)包括:数据库、集合、部分集合和集群;
  2. 操作(action)包括:对资源进行的增、删、改、查(CRUD)操作。

常用的内置角色

角色 权限描述
read 可以读取指定数据库中任何数据。
readWrite 可以读写指定数据库中任何数据,包括创建、重命名、删除集合。
readAnyDatabase 可以读取所有数据库中任何数据(除了数据库 config 和 local 之外)
readWriteAnyDatabase 可以读写所有数据库中任何数据(除了数据库 config 和 local 之外)
dbAdmin 可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作。
dbAdminAnyDatabase 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库 config 和 local 之外)
clusterAdmin 可以对整个集群或数据库系统进行管理操作。
userAdmin 可以在指定数据库创建和修改用户。
userAdminAnyDatabase 可以在指定数据库创建和修改用户(除了数据库 config 和 local 之外)