• 【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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如注释

    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"
    
    • 1

    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
    
    • 1

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

    查看容器日志:docker logs mongodb7

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

    4.2、解决方法

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

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

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

    5、参考文档

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

  • 相关阅读:
    【教程】安装labelme以及旋转标记工具roLabelimg
    Google Earth Engine(GEE)——一个简单的影像波段时序折现图
    分布式点函数
    JVM | 命令行诊断与调优 jhsdb jmap jstat jps
    计算器之策略
    Android 开发学习(二)
    GitHub commit时出现 无法访问443 Operation timed out的解决办法
    数据持久化技术——MP
    [数据结构]什么是树?什么是二叉树?
    java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统
  • 原文地址:https://blog.csdn.net/luckysiesteven/article/details/132976893