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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值