docker_mongo使用
官方 docker 镜像:https://hub.docker.com/_/mongo/
前篇
- https://hub.docker.com/_/mongo/
- http://www.runoob.com/docker/docker-install-mongodb.html
- https://blog.igevin.info/posts/docker-mongo-auth/
- https://blog.csdn.net/Oscer2016/article/details/77587481
部署
pull 镜像
1
2
3
4
5
6root@ubuntu:~# docker search mongo
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mongo MongoDB document databases provide high av... 3468 [OK]
mongo-express Web-based MongoDB admin interface, written... 170 [OK]
root@ubuntu:~# docker pull mongorun 镜像,挂载数据到宿主中,且带认证 (–auth)
1
2
3
4
5
6
7
8
9
10
11
12$ mkdir -p /opt/mongo/db
$ docker run -d \
--restart=always \
--name mongo_server \
-p 28017:27017 \
-v /opt/mongo/db:/data/db \
mongo \
--auth
// 指定 用户 密码
$ docker run -d --restart=always --name mongo_server -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 -p 28017:27017 -v /root/docker_data/mongo/data:/data/db mongo:4.2.2 --auth进入容器中的
admin
数据库, 创建用户密码1
2
3$ docker exec -it mongo_server mongo admin
connecting to: admin
> db.createUser({ user: 'root', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });测试, 可以使用一下几种方式连接 MongoDB
进入容器内某个数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18root@ubuntu:~# docker exec -it mongo_server mongo admin # 进入 admin 数据库
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("aafbdbb0-2559-4f74-8e42-b349e5caf532") }
MongoDB server version: 4.2.2
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
> db # 查看数据库
admin
> db.auth("root", "123456") # 需要验证 用户密码
1
> db.system.users.find() # 然后才可以操作数据库
{ "_id" : "admin.root", "userId" : UUID("0bdbd0df-16dc-4836-8988-6d41ea9d054d"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "yLsuB7jknRY7lHpA1sbtKQ==", "storedKey" : "apvSXElb4yoGR1aXImUzEV+CDt8=", "serverKey" : "xR7zuFoM9ZRaJsVikBcOhbkIZ80=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "dMC+tB5ncyD0m+zlZjDVc9oplyOurexHjqsDxg==", "storedKey" : "0Y+A6R1V9PBWZKJjdcG9ff0caBm+MjYAkpUW55vAUtM=", "serverKey" : "Nd/P91+xBm0WxHvWtcJmlIH1SGGmcYyFGHcJOXIuvQo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
>带 用户密码 验证 进入容器内某个数据库
1
2
3
4
5
6
7root@ubuntu:~# docker exec -it mongo_server mongo --port 27017 admin -u root -p 123456 # 进入 admin 数据库
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("59b20011-dca5-4639-a5cd-56b9f803fa92") }
MongoDB server version: 4.2.2
> db.system.users.find() # 可以直接操作数据库
{ "_id" : "admin.root", "userId" : UUID("0bdbd0df-16dc-4836-8988-6d41ea9d054d"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "yLsuB7jknRY7lHpA1sbtKQ==", "storedKey" : "apvSXElb4yoGR1aXImUzEV+CDt8=", "serverKey" : "xR7zuFoM9ZRaJsVikBcOhbkIZ80=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "dMC+tB5ncyD0m+zlZjDVc9oplyOurexHjqsDxg==", "storedKey" : "0Y+A6R1V9PBWZKJjdcG9ff0caBm+MjYAkpUW55vAUtM=", "serverKey" : "Nd/P91+xBm0WxHvWtcJmlIH1SGGmcYyFGHcJOXIuvQo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }用 Navicat Premium 连接
创建用户及数据库
使用超级管理员账号, use 新数据库, 在该数据库下 create 新用户
使用 root 用户登录 admin 数据库,并认证
1
2
3
4
5
6wilker@ubuntu:~$ docker exec -it mongo_server mongo admin
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.6
> db.auth("root","123456")
1创建 或者 切换 数据库
1
> use myblog // 不存在的情况下就会创建
创建用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23> db.createUser(
{
user: "wilker",
pwd: "123456",
roles: [ { role: "readWrite", db: "myblog" },
{ role: "read", db: "myblog22" } ]
}
)
# 创建成功提示
Successfully added user: {
"user" : "wilker",
"roles" : [
{
"role" : "readWrite",
"db" : "myblog"
},
{
"role" : "read",
"db" : "myblog22"
}
]
}使用新建用户 wilker:123456 登录
1
2
3
4
5
6wilker@ubuntu:~$ docker exec -it mongo_server mongo myblog
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/myblog
MongoDB server version: 3.4.6
> db.auth("wilker","123456")
1往 col 集合 插入数据
1
2
3
4
5
6
7
8> db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
WriteResult({ "nInserted" : 1 })查询 col 集合 数据
1
2> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
参考:
指定配置启动
配置参考官网: https://docs.mongodb.com/manual/reference/configuration-options/#net-options
编辑配置文件 /etc/mongo/abc.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# vi /etc/mongo/abc.conf
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
dbPath: "/var/mongodb/mydata"
journal:
enabled: true
net:
bindIp: 0.0.0.0
port: 27017
security:
authorization: "enabled"- 这里指定了 security 验证的话, 启动mongod时就无须加
--auth
参数了, 所以这里加更灵活点, 参考: https://docs.mongodb.com/manual/tutorial/enable-authentication/#re-start-the-mongodb-instance-with-access-control - 启动验证后, 远端链接就需要 用户密码 才能登录
- 这里指定了 security 验证的话, 启动mongod时就无须加
指定配置文件启动
1
# mongod --auth --config /etc/mongo/abc.conf
远端连接
修改配置文件 /etc/mongo/abc.conf,
bindIp
改为0.0.0.0
1
2
3
4
5...
net:
bindIp: 0.0.0.0
port: 27017
...指定配置 重启MongoDB,
# mongod --auth --config /etc/mongo/abc.conf