docker快速搭建数据库服务及常见问题(二)-- mongodb容器篇

docker快速搭建MongoDB服务及常见问题

拉取MongoDB的docker镜像

docker pull mongo:3.4
不标明tag , 默认为latest
查看是否拉取成功 docker images 如果没有成功, 重试命令
在这里插入图片描述

创建MongoDB容器, 启动容器

  1. 启动MongoDB容器
    docker run -d --name mymongo -p 27017: 27017 mongo:3.4
    就这样一个mongo服务就起来了
    可以通过命令看看是否 可用
    mongo --port 端口 # 如果映射的端口也是27017 直接输入 mongo 但实际不建议映射27017
root@iZuf6jc5pa52ijdedm8i0fZ:~# mongo

Server has startup warnings: 
2019-05-29T01:27:29.482+0000 I STORAGE  [initandlisten] 
2019-05-29T01:27:29.482+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-05-29T01:27:29.482+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] 
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] 
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] 
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2019-05-29T01:27:29.562+0000 I CONTROL  [initandlisten] 
> show dbs
admin  0.000GB
local  0.000GB
> use test
switched to db test
> db.mytest.insert({'msg':'hello'})
WriteResult({ "nInserted" : 1 })
> show tables;
mytest
> db.mytest.find()
{ "_id" : ObjectId("5cede16c17a6b5762063996d"), "msg" : "hello" }

上述操作证明 mongo容器没有问题

  1. 如何数据持久化
    同样mongo 容器也需要考虑数据持久化的问题, 实现的方式跟MySQL也是一样, 挂载数据卷
    docker run -d --name mymongo -v /dvol/mongo/db:/data/db -p 27017: 27017 mongo:3.4

  2. 如何添加用户认证
    那么 MongoDB容器如何实现用户认证呢? 网上也有很多种, 我呢一般喜欢用下面一种
    首先创建mongod.conf 文件, 个配置文件的具体解释可以参考 https://blog.csdn.net/weixin_43886133/article/details/90607193

storage:
  dbPath: /data/db
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
net:
  maxIncomingConnections: 100000
  ip:27017
  bindIp: 0.0.0.0
processManagement:
  fork: true
  pidFilePath: /data/mongodb/mongod.pid  
# security:
  # authorization: enabled

将配置文件放到 /dvol/mongo/config/ 目录下
添加用户认证第一步:
启动容器
配置文件
security: # 一定要注释掉, 不然没有权限操作MongoDB
docker run -d --name mymongo -v /dvol/mongo/config:/etc/mongod -v /dvol/mongo/db:/data/db -p 27017: 27017 mongo:3.4 -f /etc/mongod/mongod.conf
添加用户认证第二步:
确保容器启动成功后, 进入mongo shell

> use admin
> db.createUser({
... user:"root",
... pwd:"root123",
... roles:[
... {
... role:"userAdminAnyDatabase",
... db:"admin"
... }
... ]
... })

添加用户认证第三步:
将 配置文件 security: 部分注释打开
重启 docker 容器
docker run restart mymongo

#  直接进去 会显示以下信息
connecting to: mongodb://127.0.0.1:10013/
Implicit session: session { "id" : UUID("29b0fd2e-0c23-4859-817f-2f693529273f") }
# 用户认证
> use admin
> db.auth('root', 'root123')
1

返回1 代表 用户认证 开启成功, root 用户认证通过
这样可以针对不同的库开启不同的用户权限了

db.createUser(
{
   user: "user1",
   pwd: "user1",
   roles: [
      { role: "readWrite", db: "mydb" },
      { role: "readWrite", db: "mydb_last" }         
   ]
}
)
  1. 常见的一些问题
    1)用户无法创建: 可能是由于 mongo shell 版本 低于, mongod 的版本, 需要对mongo shell 升级, 或者使用低版本的mongod
    2)内存占比过大: 启动参数可以添加 --wiredTigerCacheSizeGB 5
    3)容器删除后日志无法查看, 可以挂载日志目录
    如果有别的问题可以留言交流
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值