【MongoDB】docker部署社区版(一)

2023-09-18 16:13:39

0、背景介绍

项目中使用MongoDB了,服务器挂掉,自己在本地搭一个试试。

1、版本选择

首先有社区版和和商业版。我选的是社区版。链接:https://hub.docker.com/r/mongodb/mongodb-community-server/tags

1.1、标签选择

看到标签有两个大类,一个是Ubuntu一个是ubi8
在这里插入图片描述
查了一下,这个指的是镜像的基础镜像操作系统(出处)。ubi8是红帽出的一个基础镜像,鉴于ubi8体积小一点点,捏着鼻子选了这个。个人还是比较偏爱Ubuntu的
docker pull mongodb/mongodb-community-server:7.0.0-ubi8

2、安装

2.1、命令

#创建挂载卷
#If you want to persist the data on your local machine, you can mount a volume using the -v argument.
mkdir -p /usr/local/db/mongodb/data
chmod 777 /usr/local/db/mongodb/data
mkdir -p /usr/local/db/mongodb/configdb
chmod 777 /usr/local/db/mongodb/configdb
#拉取镜像
docker pull mongodb/mongodb-community-server:7.0.0-ubi8
#启动镜像
docker run -itd --restart always --name mongodb7  -p 37018:27017 -e MONGO_INITDB_ROOT_USERNAME=**** -e MONGO_INITDB_ROOT_PASSWORD=****  -v /usr/local/db/mongodb/data:/data/db mongodb/mongodb-community-server:7.0.0-ubi8

如注释

2.1.1、创建挂载卷

 第一个命令【mkdir /usr/local/db/mongodb/data】创建数据映射目录,后续等启动后再看看配置的存储目录,之后再部署的时候把配置项也映射出来。
 第二个命令【chmod 777 /usr/local/db/mongodb/data】授权,否则启动的时候报错。见异常处理

2.1.2、拉取镜像

 第五行命令【docker pull mongodb/mongodb-community-server:7.0.0-ubi8】,从hub.docker.com拉取镜像。速度可能有点慢

2.1.3、启动容器

 第六行,启动一个名为【mongodb7 】的容器。
   -itd指后台运行;
   --restart always 指启动失败/宿主机重启后容器自动启动,好处是服务器重启时不用手动启容器,缺点是容器异常无法启动时会不停的重启,因此使用该参数创建容器后需要检查容器是否已经正常启动;
   -p 指端口映射,宿主机端口:容器内端口 ;
   -e指的是环境变量,****指代的是用户名、密码;
   -v是挂载的目录,将容器内的目录映射到宿主机的物理目录,用于数据的持久化,即使容器被销毁,数据仍在宿主机上存储。
在这里插入图片描述
  拉取镜像的过程有点坎坷,不知道也懒得配国内镜像。嫌弃慢的可以找国内镜像源,把docker的源换一下即可。

3、补充

官方页面
https://www.mongodb.com/compatibility/docker
原来启容器的时候可以指定设置root权限的用户名密码
To initialize your MongoDB with a root user, you can use the environment variables MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_ROOT_PASSWORD. These environment variables will create a user with root permissions with the specified user name and password.
If you want to use the mongoexport tool to export an existing collection to a .json file, you can use the command from a separate MongoDB container. You will need to mount a volume to be able to access the resulting JSON file.
想要使用mongo导出json功能,需要启动容器时映射临时文件。

docker run -it -v $(pwd):/tmp mongodb/mongodb-community-server:$MONGODB_VERSION mongoexport --collection=COLLECTION --out=/tmp/COLLECTION.json "mongodb://username:password@clusterURL/database"

4、异常处理

4.1、无法启动容器 Could not init database

部署时发现一旦挂载卷,就无法启动容器,命令如下

docker run -itd  --name mongotest02  -p 37018:27017  -v /usr/local/db/mongodb/data:/data/db  mongodb/mongodb-community-server:7.0.0-ubi8

查看容器状态:docker ps -a |grep mongo
显示的不是up,说明容器没有启动成功
在这里插入图片描述

查看容器日志:docker logs mongodb7

在这里插入图片描述
提示是配置错误,子进程执行失败,不能初始化数据库
在这里插入图片描述

4.2、解决方法

提示不能初始化数据库,想到可能配置有问题。但是经过对比后发现配置目录是空的,所以猜测是挂载卷权限不够,容器启动时不能在映射的目录创建文件,因此给目录授权。(授权最好按标准来,别学我都搞777容易埋坑)

chmod 777 /usr/local/db/mongodb/data

授权完毕后执行启动容器命令就可用了。

5、参考文档

https://www.mongodb.com/compatibility/docker
https://catalog.redhat.com/software/containers/ubi8/ubi/5c359854d70cc534b3a3784e

更多推荐

MySQL数据库入门到精通1--基础篇(MySQL概述,SQL)

1.MySQL概述1.1数据库相关概念目前主流的关系型数据库管理系统:Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。SQLServe

docker基础命令快速入门

docker快速入门Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。Docker的三个概念镜像Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容

4k、VR与万兆光网

“全光万兆”对VR意义重大。pico4的分辨率PICO4的单眼分辨率是2160×2160,整体分辨率高达4320×2160。这是一款高性能的VR一体机,采用了2.56英寸的Fast-LCD屏幕,最高可实现90Hz刷新率,还有1200PPI和20.6PPD的超清晰画面表现。PICO4的视场角为105°,比上一代PICON

使用HTTP爬虫ip中的常见误区与解决方法

在使用HTTP爬虫进行网页抓取时,涉及到IP地址的处理,可能会存在一些常见的误区。以下是一些常见误区及解决方法:1.使用个人IP进行大规模爬取:如果你使用个人住宅IP进行大规模爬取,可能会被目标网站视为恶意攻击,从而导致被封禁。解决方法:使用代理IP,或者租用专门的爬虫服务器。2.忽略IP封禁:一些网站可能会封禁特定的

Android kotlin系列讲解(进阶篇)解析XML格式数据

点击查看>返回总目录<|上一篇:Androidkotlin系列讲解(入门篇)使用HTTP访问网络文章目录1、Pull解析方式2、SAX解析方式通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据。不过这个时候就出现了一个问题,这些数据到底要以什么样的格式在网络

Kotlin 不可变数组和可变数组

在Kotlin中,可以使用数组来存储一组相同类型的元素。Kotlin提供了两种类型的数组:不可变数组和可变数组。不可变数组(ImmutableArrays)不可变数组的大小(元素数量)在创建后就确定,并且不能更改。使用arrayOf()函数或者arrayOfNulls()函数创建不可变数组。不可变数组中的元素值是固定的

2023年日经225指数研究报告

第一章指数概况1.1概述日经225指数,又被称为日经平均股票价格或日经225平均指数,通常被称为日经或日经指数,是东京证券交易所的一个重要股价指数。该指数自1950年起由日本经济新闻(TheNikkei)日报计算,它是一个以价格为权重的指数,以日元(JP¥)为单位,其组成部分每年审查一次。该指数涵盖了东京证券交易所第一

Git标签管理:从创建到推送的完整指南

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

RabbitMQ - 消息堆积问题的最佳解决方案?惰性队列

目录一、惰性队列1.1、消息堆积问题1.2、消息堆积问题的解决方法从消费者的角度:从队列的角度:1.3、引入惰性队列1.3.1、什么是惰性队列1.3.2、惰性队列的使用1.3.3、效果演示一、惰性队列1.1、消息堆积问题当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息到达上限

滴滴可观测平台 Metrics 指标实时计算如何实现了又准又省?

在滴滴,可观测平台的Metrics数据有一些实时计算的需求,承载这些实时计算需求的是一套又一套的Flink任务。之所以会有多套Flink任务,是因为每个服务按照其业务观测需要不同的指标计算,也就对应了不同数据处理拓扑。我们尽力抽象用户相同的计算需求,不过由于Flink实时计算任务开发模式和实时计算框架的限制,这些观测指

专业软件测评中心:关于软件性能测试的实用建议

软件性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。一、软件性能测试的实用建议1、制定清晰的测试目标:明确测试目标和需求,以便更好地组织测试活动。2、选择合适的测试工具:根据测试需求选择适合的性能测试工具

热文推荐