使用Docker 安装 MongoDB 环境

225 阅读3分钟
  • 开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

什么是MongoDB

MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB的主要特点

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。

使用Docker 安装 Mongo

  • 拉取镜像
docker pull mongo #拉取最新latest
docker pull mongo:5.0 #指定拉取镜像的版本
  • 创建数据持久化目录

防止容器删除数据丢失

mkdir -p /docker_volume/mongo/data
  • 运行容器
docker run -itd --name mongodb -v /docker_volume/mongo/data:/data/db -p 27017:27017 mongo --auth

运行容器名称为 mongodb -v为持久化卷 -p为映射端口 --auth为开启授权验证,由于mongodb 默认没有用户,我们需要进入容器创建用户。

  • 进入容器
docker exec -it [容器名/容器id] /bin/bash
  • 查询、切换命令
show dbs #查询所有的数据库
show tables #查询数据库下面有哪些表
use admin #切换到指定的数据库
  • 创建用户
db.createUser
({ 
    user:'test', //用户名
    pwd:'Admin123456!@#', //密码
    roles:[ 
    { 
        role:'read', //角色 
        db: 'admin' //授权的DB
    }]
})
  • 删除用户,需要特定角色
db.system.users.remove({user:"test"})
  • 用户相关角色

    • Read:允许用户读取指定数据库
    • readWrite:允许用户读写指定数据库
    • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
    • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
    • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
    • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
    • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
    • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
    • root:只在admin数据库中可用。超级账号,超级权限
  • 连接MongoDB

db.auth('test', 'Admin123456!@#')
  • 基础操作命令
db.test.insert({"name": "zzs","age":108}) #插入一条数据
db.test.insert([{"name": "zzs","age":108},{"name": "qqb","age":66}]);//批量插入
db.test.find(); #查询第一条数据
db.test.find({"name":"zzs"}) #添加查询条件
db.test.remove({"name":"zzs"}); #删除