使用 Docker 部署 MongoDB

查看官网安装教程后感觉直接使用包管理器安装mongo比较复杂,本文主要介绍使用docker安装部署mongo的方法,并对基本配置项进行自定义。保姆式全程指导。

1 使用 Docker

已经有Docker运行环境的同学可以跳过这一步

1.1 在Windows 10 使用 Docker Desktop

Docker官方推荐在Windows上使用Docker Desktop。首先下载该软件:

https://www.docker.com/get-started

选择Download for Windows,下载完成后按提示安装即可。安装期间可能会提示同时安装WSL2内核,同意即可。

安装完成后可能需要重启电脑,之后便会看到任务栏中出现Docker图标。打开Powershell运行docker,会出现使用提示。

1.2 Ubuntu 使用 Docker-CE

Docker-CE即Community Edition,是可供个人免费使用的docker社区版本。

在Ubuntu安装Docker-CE时,推荐使用阿里云提供的镜像,可以加快安装下载速度

  1. 首先apt刷新缓存,并安装一些必要的工具
sudo apt update
sudo apt -y install apt-transport-https ca-certificates curl software-properties-common
  1. 然后添加证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  1. 向apt包管理器添加用于安装Docker-CE的源地址,此处使用阿里云提供的地址
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  1. 使用apt安装Docker-CE
sudo apt -y update
sudo apt -y install docker-ce
  1. 打开终端输入docker,可以看到使用提示

2 换源

由于Docker默认使用的是hub.docker.com提供的镜像,在国内连接速度较慢,因此建议使用国内镜像。

如果使用的是Docker Desktop:

点击任务栏上的docker小图标,然后点击设置的齿轮按钮,在Docker Engine选项中,在registry- mirrors中加入镜像地址,此处使用的是网易提供的镜像。然后点击Apply & Restart 按钮

如果使用的是Docker-CE:

在终端中运行以下命令来修改/etc/docker/daemon.json即可:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3 创建 mongo 容器

打开终端(Powershell on Windows & bash on Linux,Linux可能需要使用sudo

docker pull mongo

等待镜像下载完成,接下来正式制作mongodb容器。

docker run -it --name mongodb1 \
-e MONGO_INITDB_ROOT_USERNAME=mongoroot \
-e MONGO_INITDB_ROOT_PASSWORD=VdikAfsMhx7 \
-v /home/share/mongodb:/data/db \
-p 10001:27017 -d mongo

下面是参数解释:

-it

[必需] 指的是为容器分配一个终端,一般来说都会加上这个参数

--name

为这个容器添加一个别名

-e MONGO_INITDB_ROOT_USERNAME

[建议] 创建mongodb的root权限用户,设置用户名

-e MONGO_INITDB_ROOT_PASSWORD

[建议] 设置上述拥有root权限的用户的密码

-v /home/share/mongodb:/data/db

[可选] 磁盘映射,将容器内的/data/db文件夹的内容映射到本机的/home/share/mongodb文件夹内。这样之后需要备份文件或者做文件分析、逆向分析时就可以直接在本机上操作,不需要先进入容器再从容器中把文件复制出来

-p 10001:27012

[必需] 与MySQL不同,mongodb默认使用的端口号为TCP27012,因此在端口映射时需要注意。端口影射时,冒号前的是本机端口,冒号后的是容器端口,这个参数的意思时,将容器内27012端口映射到本机的10001端口上,之后访问本机的10001端口,即可连接到容器内mongodb的27012端口

-d

[必需] 在后台运行容器。运行这条指令后,容器将在后台运行,终端返回该容器的ID

4 使用 mongo

容器创建好后,使用exec进入容器中。实际上,现在mongo已经开始运行,使用navicat、

MongoDB Shell等工具都可以连接这个数据库。直接进入容器内操作mongo比较简便。

(以下命令在Linux运行时可能需要加sudo)

首先查看当前运行中的容器

docker ps

理论上会看到所有正在运行中的容器ID,使用的镜像,映射到的端口,以及容器的名字。

使用容器ID或者容器别名都可以连接到这个容器,例如:

docker exec -it mongodb1 /bin/bash

可以看到已经进入容器内部。然后使用mongo命令操作数据库:

mongo -u mongoroot

此处-u 后写刚才创建容器时设定的root权限用户的用户名,随后根据提示输入密码

需要注意的是,输入密码的过程中,密码是不会在终端上显示的,输入之后直接按回车键即可。

成功进入MongoDB Shell:

5 配置 mongo

mongo的常见操作:

MongoDB Shell 命令 含义
show dbs 展示所有数据库
use test 使用test数据库(如果没有则新建test数据库)
show collections 查看当前数据库内的集合
db.createCollection("Students") 在当前数据库内创建名为Students的集合
db.Students.insert(文档) 在Students集合中插入文档(文档具体格式后文详述)
db.Students.find() 查看Students集合中所有文档的所有内容

实际使用过程中,只有一个root权限的用户是不行的,因此需要对数据库进行用户权限设置。

接下来创建一个数据库mathgroup,并创建一个用户leader,配置leader的权限。

由于之前不存在mathgroup数据库,因此首先使用use命令创建这个数据库:

use mathgroup

在数据库中随意加入一些数据:

db.Questions.insert({"cate":"Easy", "Content":"1+1=?", "Answer":"2"})

查看Question集合中的内容:

db.Questions.find()

mongo会给每个文档自动添加"_id",提供一个类似主键(唯一序号)的功能

接下来创建用户leader,并为其赋予该数据库的管理权限:

db.createUser({user:"leader", pwd:"123456", roles:[{role: "dbAdmin", db: "mathgroup"}]})

下一次连接mongodb时,使用leader用户连接:

mongo -u leader --authenticationDatabase "mathgroup"

输入密码后查看所有数据库:

show dbs

发现只能看到mathgroup数据库

6 其他

mongodb是NoSQL数据库,MySQL中的表table类似于mongo中的集合collection,mongo的集合中可以保存很多文档,文档一般是json形式,这意味着可以用json的形式在mongo中保存各式各样的内容。

关于文档:https://www.runoob.com/mongodb/mongodb-insert.html

mongodb的用户控制实际上非常复杂(官方承认),但正因如此,我们可以为各种不同的场景制定合适的访问策略

关于用户角色【文档】:https://docs.mongodb.com/manual/reference/built-in-roles/

关于用户角色【博客】:https://www.cnblogs.com/swordfall/p/10841418.html

你可以在Java、Python等主流语言中使用mongo,使用时主要的步骤大同小异:连接mongo,选定数据库、用户认证、检索数据库、得到数据、关闭连接。下面是一个使用Python连接Mongo的示例:

import json
import pymongo def seekFile(fileName) -> dict:
"""
Get a dict by filename from Mongodb Data Server :param fileName: The name of the file you want from mongodb
:return: dict
"""
client = pymongo.MongoClient(host='IP Address', port=27017) db = client.数据库名
db.authenticate("用户名", "密码")
collection = db.集合名 result = collection.find_one({"fileName": "{0}".format(fileName)}) client.close()
return result if __name == '__main__':
print(seekFile("John"))

使用Docker 部署MongoDB的更多相关文章

  1. (八) Docker 部署 mongodb

    参考并感谢 官方文档 https://hub.docker.com/_/mongo 下载mongo镜像(不带tag标签则表示下载latest版本) docker pull mongo 启动 mongo ...

  2. docker 部署 mongodb 并且开启远程连接

    mongodb 使用 docker 部署 mongodb 拉取镜像 docker pull mongo 可以查看镜像是否下载成功 docker images | grep mongo 应该会有如下的显 ...

  3. 使用 Docker 部署 MongoDB 分片

    创建配置服务复制集 docker run --name configsvr0 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsv ...

  4. 使用 Docker 部署 MongoDB 复制集

    启用三个 mongod 建立复制集. MongoDB 版本选择目前最新的稳定版 3.6.2-jessie. docker run --name mongo0 -d mongo:3.6.2-jessie ...

  5. Docker应用五:使用Dockerfile部署MongoDB

    在Docker容器中部署MongoDB 不做铺垫,直接开撸: 一.软件准备: docker(已安装) MongoDB-3.2.0.tgz 二.准备配置文件mongo.conf port=27017 d ...

  6. 在Docker中安装和部署MongoDB集群

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...

  7. 手把手教你用Docker部署一个MongoDB集群

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...

  8. [原创]在Docker上部署mongodb分片副本集群。

    一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. 1.在根目录下创建mongod的do ...

  9. docker备份mongodb数据,导入导出

    场景:服务器要升级,之前在linux部署的mongodb没有用docker,升级后,mongodb要用docker部署,并将原有的mongodb数据导入到docker部署的mongodb中. 1.在l ...

随机推荐

  1. 一款免费在线转pdf的工具 和 window免费镜像

    PDF爱好者的在线工具 完全免费的PDF文件在线管理工具,其功能包括:合并PDF文件.拆分PDF文件.压缩PDF文件.Office文件转换为PDF文件.PDF文件转换为JPG图片.JPG图片转换为PD ...

  2. 基于XC7A100T的PCIe千兆电口以太网收发卡

    一.板卡概述 本板卡采用Xilinx公司的Artix7系列的XC7A100T-2FGG484 芯片作为主处理器.包含双路千兆电口网络,双组DDR,PCIeX1 V1.1接口,板卡设计满足工业级要求. ...

  3. Solution -「CF 494C」Helping People

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\) 和 \(m\) 个操作,第 \(i\) 个操作有 \(p_i\) 的概率将 \([l_i,r_ ...

  4. 记一次慢查询优化sql

    sql语句优化(慢查询日志) 最近,旧系统向新系统迁移工程刚刚结束.开发完成后,测试阶段也是好好休息了一把.接到一个需求,由于内部员工使用的网站部分功能加载时间很长,所以需要去优化系统的一些功能.大致 ...

  5. requests post/get请求params参数和post请求正文的数据类型记录

    1. 前言 在写接口数据驱动测试框架时,(从excel表中读取的非数据的值都是str类型),发送post/get请求因为数据类型原因,请求失败,走了一些弯路,记录总结一下请求的参数或者请求正文的数据类 ...

  6. Meterpreter后渗透阶段关闭防火墙与杀毒软件

  7. [GAME] [Civilization] 文明6字体及字体大小修改

    一.前言 文明作为一款文本信息量较大的游戏,提供的字体和UI界面设置还是偏少了一些,对干眼用户极不友好 二.用户界面整体缩放 首先是游戏自带的缩放选项:图象选项-图像-UI质量提升,设置为150%或更 ...

  8. C++ 派生类函数重载与虚函数继承详解

    目录 一.作用域与名字查找 1.作用域的嵌套 2.在编译时进行名字查找 3.名字冲突与继承 4.通过作用域运算符来使用隐藏的成员 二.同名函数隐藏与虚函数覆盖 1.几种必须区分的情况 2.一个更复杂的 ...

  9. 《Symfony 5全面开发》教程02、安装运行环境并初始化Symfony项目

    Symfony是PHP框架,在学习Symfony之前,我们需要安装PHP运行环境.如果你是MacOS系统,可以使用Homebrew来安装PHP运行环境. Homebrew官网 https://brew ...

  10. IDEA 连接MySQL并使用

    IDEA 连接MySQL方式 MySQL使用命令行的形式实在是有点难受,多行书写的时候要是写错了就比较难过了,因此还是需要一个图形化的操作界面.有很多可选择方式,由于之前就下载了IDEA,其中也继承了 ...