首页 > 数据库 >使用 Docker 部署 Mongodb

使用 Docker 部署 Mongodb

时间:2023-08-13 14:12:27浏览次数:59  
标签:mongo 部署 Mongodb 数据库 admin mongodb Docker root docker

Mongodb 是最像关系型数据库的 NoSql 数据库,其数据类型非常丰富,数据结构松散,采用类似 Json 的 Bson 二进制格式存储数据,还支持对索引功能。主要应用在数据量大、读多写少或者读写都比较频繁、数据价值较低的场景中,如果社交平台的点赞和评论、游戏、物流信息和轨迹存储等。

由于在企业中,无论是开发环境还是生产环境,基本上都采用 Docker 或其它容器化技术部署中间件,因此这里也只是介绍使用 Docker 和 DockerCompose 部署 Mongodb,毕竟采用容器化部署中间件非常方便快速,不存在环境兼容性,省去了很多不必要的麻烦,开发人员也很容易掌握。

我的 CentOS7 的虚拟机地址为:192.168.136.128 ,已经安装过了 Docker 和 DockerCompose,在此虚拟机上演示。

Mongodb 的中文官网地址:https://www.mongodb.com/zh-cn


一、使用 Docker 部署

对于 docker 的 mongodb 镜像中,其数据存放目录在 /data/db 中,日志的存放目录为 /var/log/mongodb 中,配置文件存放路径为 /etc/mongod.conf,因此我们首先要在宿主机的 CentOS7 上创建好对应的目录或文件。

# 创建宿主机用于存放数据的目录
mkdir -p /app/mongo/data
# 创建宿主机用于存放日志的目录
mkdir -p /app/mongo/logs
# 创建 mongodb 的配置文件,用于映射 docker 镜像内的配置文件
vim /app/mongo/mongod.conf

将以下配置内容,放置到 mongod.conf 中

systemLog:
  # MongoDB发送所有日志输出的目标指定为文件
  destination: file
  # mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
  path: "/var/log/mongodb/mongodb.log"
  # 当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
  logAppend: true
storage:
  # mongod实例存储其数据的目录。
  dbPath: "/data/db"
  journal:
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
    enabled: true
net:
  # 服务实例绑定的IP,默认是localhost(多个ip用逗号分隔)
  bindIp: 0.0.0.0
  #绑定的端口,默认是27017
  port: 27017

注意:上面的配置文件中配置的数据和日志存放目录,是 Docker 镜像内部的路径。

然后运行命令,下载最新的 mongodb 的 docker 镜像并启动容器:

# 由于命令太长,为了方便阅读,采用反斜线(\)换行
docker run --name mymongo -p 27017:27017 \
	-v /app/mongo/data:/data/db \
	-v /app/mongo/logs:/var/log/mongodb \
	-v /app/mongo/mongod.conf:/etc/mongod.conf \
	-d mongo --auth

由于 mongodb 默认情况下,不需要用户名密码就可以使用,使用 --auth 参数表示需要用户名和密码登录。因此我们就必须进入到 mongodb 的容器内部创建一个用户,这里准备创建一个权限很大的用户,方便后续的使用和各种操作。

# 查看容器列表,找到 mongodb 的容器 id
docker ps
# 我的虚拟机中 mongodb 容器的 id 为 93e457219920

# 进入容器中
docker exec -it 93e457219920 bash

# 使用 mongo 命令进入 admin 库中
mongo admin

# 在 mongodb 的 shell 中,创建一个超级用户
db.createUser({user:'root',pwd:'root',roles:[{role:'root',db:'admin'}]})

# mongodb 的 admin 库里面是专门存放 mongodb 用户的,
# 以下是 mongodb 内置的角色,我这里基于 admin 库创建了一个 root 角色的用户,拥有最高权限

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

备注:给 mongodb 创建用户时,用户名和密码可以随便指定,这里设置的用户名和密码都是 root,指定的角色也是 root

由于 mongodb 的用户是存储在 admin 库中,因此重启 mongodb 的 docker 容器,用户信息也不会丢失

OK,经过以上过程,docker 部署 mongodb 就完成了,下面我们可以检验以下成果。

目前高版本的 Navicat 已经支持连接 Mongodb ,我使用的 Navicat 的版本是 16,如下图新建 mongodb 的连接。

image

我的虚拟机 ip 是 192.168.136.128,连接 admin 库,端口是 27017,用户名和密码都输入 root ,然后点击测试连接。

测试连接没问题后,点击确定即可,打开如下界面,发现 mongodb 下没有任何数据库,这很正常。

image

我们可以新建一个 mongodb 的数据库,比如 mytest 数据库。

image

创建后的 mytest 数据库如下图所示:

image


二、使用 DockerCompose 部署

由于我是在同一台虚拟机进行部署 mongodb ,为了区分,这次换个部署的目录,这次放在 root 目录下

# 创建宿主机用于存放数据的目录
mkdir -p /root/mongo/data
# 创建宿主机用于存放日志的目录
mkdir -p /root/mongo/logs
# 创建 mongodb 的配置文件,用于映射 docker 镜像内的配置文件
vim /root/mongo/mongod.conf

mongo.conf 配置文件的内容,跟上面 docker 部署时的配置文件内容一致,这里省略。

# 对于 dockercompose 来说,其默认的配置文件名称为 docker-compose.yml
# 因此在创建一个 docker-compose.yml 配置文件
vim /root/mongo/docker-compose.yml

将以下内容,填写到 docker-compose.yml 文件中:

version: '3.9'
services:
  # 服务名称为 mongodb,该名称主要用于容器之间服务的 dns 解析
  mongodb:
    # 容器的名称为 mymongo
    container_name: mymongo
    # 使用的镜像名称
    image: mongo:latest
    # 对外暴露的端口
    ports:
      - "27017:27017"
    # 当 docker 服务启动后,自动启动 mongodb 容器
    restart: always
    # 增加启动参数,--auth,表示连接 mongodb 需要用户名和密码
    command:
      - "--auth"
    # 宿主机硬盘目录映射容器内的路径
    volumes:
      - /root/mongo/data:/data/db
      - /root/mongo/logs:/var/log/mongodb
      - /root/mongo/mongod.conf:/etc/mongod.conf

然后进入到 docker-compose.yml 文件所在的目录,指定 up 命令即可

# 进入 docker-compose.yml 文件所在的目录
cd /root/mongo/

# 通过 docker-compose 启动 mongodb 容器
docker-compose up -d

接下来的操作,跟上面的 docker 部署 mongodb 的操作一样,需要进入到容器内部,创建一个超级用户。

# 通过 docker ps 命令,查到容器的 id
# 这里查询到的 id 为 34e6ddb4aac9
docker ps

# 进入容器中
docker exec -it 34e6ddb4aac9 bash

# 使用 mongo 命令进入 admin 库中
mongo admin

# 在 mongodb 的 shell 中,创建一个超级用户
# 为了区分,这里创建一个名称为 jobs 的超级用户
db.createUser({user:'jobs',pwd:'123456',roles:[{role:'root',db:'admin'}]})

最后通过 navicat 创建一个 mongodb 连接 admin 库的连接,然后测试是否可以连接成功,如下图

image


以上就是本篇博客有关使用 docker 和 docker-compose 部署 mongodb 的介绍,总体非常简单。

启动 mongodb 时,如果不加 --auth 参数时,默认情况下连接是不需要用户密码的,在开发环境还可以,但是生产环境肯定不行。

如果增加了 --auth 参数,但是由于 mongodb 部署后没有用户,因此需要进入到容器中,到 admin 库中添加一个用户才行。

新添加的用户保存在 admin 库中,而 mongodb 的数据库文件已经映射存储到宿主机的磁盘中,所以后续每次重启 mongodb 的容器,以及销毁了容器,重新创建了新的容器,都不受影响。

有关 mongodb 的操作命令,就不再介绍了,后续会介绍 Java 程序如何通过 SpringData 操作 mongodb 进行增删改查。

标签:mongo,部署,Mongodb,数据库,admin,mongodb,Docker,root,docker
From: https://www.cnblogs.com/studyjobs/p/17626496.html

相关文章

  • vue项目部署到gitee
    1、首先本地项目生成静态网页npmrunbuild使用本命令将vue项目打包成静态网页存放到dist文件夹里2、将静态资源推到gitee仓库前提条件:新建了git仓库,然后 gitclone +仓库地址,拉到本地,将dist整个文件夹放到刚才拉下来的项目文件夹中。gitadddistgitcommit-m"部署......
  • 支持本地部署,完全免费的 ABAP 来了 - ABAP Platform Trial 1909 发布
    我曾经编写过一套零基础的ABAP编程学习教程,截至2023年8月2日,总共包含114篇文章:零基础快速学习ABAP有零基础自学ABAP的朋友咨询,如果手头没有ABAP开发环境该怎么办?我在2019年时写过一篇文章,提到了SAP云平台上免费的ABAP编程环境:ABAP开发者上云的时候到了-......
  • Docker
    1.Dockocker是 PaaS 提供商dotCloud开源的一个基于 LXC 的高级容器引擎;Docker是基于Go语言开发的开源项目www.docker.com 文档为https://docs.docker.com(文档超级详细)仓库地址:https://hub.docker.com  VM与Docker的不同:VM,虚拟出一套硬件,运行完整的操......
  • Docker配置Web
    Docker配置Web一、安装Docker安装步骤详见:Ubuntu20.04安装DockerDocker构建nginx+uwsgi+flask镜像(二)Docker容器化部署Flask项目+Gunicorn+Nginx二、方法一:搭建服务1、抓取镜像抓取最新镜像:$dockerpullubuntu抓取指定版本镜像:$dockerpullubuntu:18.04......
  • Docker
    Docker[Docker教程](Docker教程|菜鸟教程(runoob.com))[Docker入门教程](Docker入门教程-阮一峰的网络日志(ruanyifeng.com))简介软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,要保证自家的软件能在那些机器跑起来,用户必须保证两件事:操作系统......
  • SVN服务器部署
    SVN服务器安装与配置[SVN安装](SVN安装|菜鸟教程(runoob.com))SVN创建版本库linux下搭建SVN服务器完全手册官方文档一、安装详见教程:https://www.runoob.com/svn/svn-install.html二、创建版本库新建一个目录用于存储SVN所有文件#mkdir/home/svn新建一个......
  • 读发布!设计与部署稳定的分布式系统(第2版)笔记30_为部署而设计
    1. 部署行为是系统生命的重要组成部分1.1. 只编写代码是不够的,只要没有在生产环境中运行,一切都不算完成1.2. 要想取得成功,需要早早地频繁部署软件1.3. 设计易于部署的软件非常有必要1.4. 零停机部署就是目标2. 机器与服务2.1. 机器是可配置的操作系统实例2.1.1. ......
  • 活字格-Linux部署
    活字格-Linux部署什么是活字格?活字格是一个企业级低代码开发平台,旨在显著提升企业或者软件公司应用系统的开发效率,同时提供前所未有的灵活性和扩展性,开发人员可以使用涵盖整个开发生命周期的集成开发环境(活字格设计器,服务管理器)进行开发、质量检测、部署、监控和管理。什么需......
  • CentOS 批量部署用户免密服务器
    一、前言在Linux系统中,SSH(SecureShell)是一种常用的远程登录和文件传输协议。传统的SSH登录需要输入用户密码,既不方便也不安全。为了解决这个问题,我们可以部署SSH的公钥认证,即免密登录。本文将详细介绍如何在CentOS上批量部署用户免密服务器。二、准备环境1台CentOS7.x的服务器(本......
  • CentOS系统上部署PXE服务器步骤
    安装Apache首先,需要安装Apache服务器。可以使用以下命令安装:yuminstallhttpd配置Apache接下来,需要配置Apache服务器,使其能够正确响应PXE请求。在httpd.conf文件中,找到以下行:<Directory"/var/www/html">将该行的AllowOverride选项设置为All,以便能够使用.htaccess文件进行配置。然......