设为首页 收藏本站
查看: 1224|回复: 0

[经验分享] 【系列8】使用Dockerfile创建带MongoDB的Centos Docker镜像

[复制链接]

尚未签到

发表于 2018-10-25 06:15:31 | 显示全部楼层 |阅读模式
  MongoDB是一款可扩展、高性能的开源文档(Document-Oriented)数据库。它采用C++开发,支持复杂的数据类型和强大的查询语言,提供了关系数据库的绝大部分功能。MongoDB由于其高性能、易部署、易使用等特点,已经在各种领域都得到了广泛的应用。
  ① 下载文件
  从GitHub Dockerpool社区账户下载Mongodb镜像项目:
  [root@docker1 ~]# git clone https://github.com/DockerPool/Mongodb.git
  Cloning into 'Mongodb'...
  remote: Counting objects: 12, done.
  remote: Compressing objects: 100% (10/10), done.
  remote: Total 12 (delta 2), reused 12 (delta 2), pack-reused 0
  Unpacking objects: 100% (12/12), done.
  查看内容,包括写好的Dockerfile和若干脚本等:
  [root@docker1 ~]# cd Mongodb/
  [root@docker1 Mongodb]# ls
  Dockerfile  mongodb-3.2.repo  mongodb-linux-x86_64-rhel70-3.6.0.tgz  pwgen-2.08.tar.gz  run.sh  set_mongodb_password.sh
  ② 其中Dockerfile内容为:
  [root@docker1 Mongodb]# cat Dockerfile
  #设置从我们之前创建的sshd镜像继承
  FROM sshd:centos
  MAINTAINER waitfish from dockerpool.com
  COPY mongodb-linux-x86_64-rhel70-3.6.0.tgz /mongodb-linux-x86_64-rhel70-3.6.0.tgz
  COPY pwgen-2.08.tar.gz /pwgen-2.08.tar.gz
  RUN yum update -y && yum install -y gcc automake autoconf libtool make
  RUN tar -xf pwgen-2.08.tar.gz
  WORKDIR pwgen-2.08
  RUN ./configure && make && make install
  #定义工作目录
  WORKDIR /
  RUN tar -xf mongodb-linux-x86_64-rhel70-3.6.0.tgz
  RUN mv mongodb-linux-x86_64-rhel70-3.6.0 mongodb
  RUN mv mongodb /usr/local/
  #设置环境变量
  ENV PATH /usr/local/mongodb/bin:$PATH
  #删除压缩包
  RUN rm -rf mongodb-linux-x86_64-rhel70-3.6.0.tgz pwgen-2.08.tar.gz
  # 创建mongodb存放数据文件的文件夹
  RUN mkdir -p /data/db
  VOLUME /data/db
  ENV AUTH yes
  # Add run scripts 添加脚本
  ADD run.sh /run.sh
  ADD set_mongodb_password.sh /set_mongodb_password.sh
  RUN chmod 755 ./*.sh
  EXPOSE 27017
  EXPOSE 28017
  CMD ["/run.sh"]
  ③ set_mongodb_password.sh脚本主要负责配置数据库的用户名和密码,内容为:
  [root@docker1 Mongodb]# cat set_mongodb_password.sh
  #这个脚本主要设置数据库的用户名和密码
  #!/bin/bash
  #判断是否已经设置过密码
  if [ -f /.mongodb_password_set ]; then
  echo "MongoDB password already set!"
  exit 0
  fi
  /usr/local/mongodb/bin/mongod --smallfiles --nojournal &
  PASS=${MONGODB_PASS:-$(pwgen -s 12 1)}
  _word=$( [ ${MONGODB_PASS} ] && echo "preset" || echo "random" )
  RET=1
  while [[ RET -ne 0 ]]; do
  echo "=> Waiting for confirmation of MongoDB service startup"
  sleep 5
  mongo admin --eval "help" >/dev/null 2>&1
  RET=$?
  done

  #通过docker logs +>  echo "=> Creating an admin user with a ${_word} password in MongoDB"
  mongo admin --eval "db.addUser({user: 'admin', pwd: '$PASS', roles: [ 'userAdminAnyDatabase', 'dbAdminAnyDatabase' ]});"
  mongo admin --eval "db.shutdownServer();"
  echo "=> Done!"
  touch /.mongodb_password_set
  echo "========================================================================"
  echo "You can now connect to this MongoDB server using:"
  echo ""
  echo "    mongo admin -u admin -p $PASS --host  --port "
  echo ""
  echo "Please remember to change the above password as soon as possible!"
  echo "========================================================================"
  ④ run.sh脚本是主要的启动脚本,内容为:
  [root@docker1 Mongodb]# cat run.sh
  #!/bin/bash
  if [ ! -f /.mongodb_password_set ]; then
  /set_mongodb_password.sh
  fi
  if [ "$AUTH" == "yes" ]; then
  #export mongodb='/usr/local/mongodb/bin/mongod --nojournal --auth --httpinterface --rest'
  export mongodb='/usr/local/mongodb/bin/mongod --nojournal --auth'
  else
  #export mongodb='/usr/local/mondodb/bin/mongod --nojournal --httpinterface --rest'
  export mongodb='/usr/local/mondodb/bin/mongod --nojournal'
  fi
  if [ ! -f /data/db/mongod.lock ]; then
  eval $mongodb
  else
  export mongodb=$mongodb' --dbpath /data/db'
  rm /data/db/mongod.lock
  mongod --dbpath /data/db --repair && eval $mongodb
  fi
  ⑤ 创建镜像
  根据Dockerfile创建镜像mongodb:latest:
  [root@docker1 Mongodb]# docker build -t mongodb .
  [root@docker1 ~]# docker images

  REPOSITORY                                 TAG                 IMAGE>  mongodb                                    latest              adf9a26bb498        15 minutes ago      1.19 GB
  ......
  ⑥ 使用示范:
  启动后台容器,并分别映射27017,28017,22端口到本地:
  [root@docker1 Mongodb]# docker run -d -p 27017:27017 -p 28017:28017 -p 37017:22 mongodb
  b38f560ba2b16a4e0c9c5b77c02e2e07b9f45eed8ce7de5dd2d6755d8d962050
  [root@docker1 Mongodb]# docker ps

  CONTAINER>  b38f560ba2b1        mongodb             "/run.sh"           4 seconds ago       Up 3 seconds        0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp, 0.0.0.0:37017->22/tcp   trusting_pasteur
  [root@docker1 Mongodb]# docker logs b38f560ba2b1
  ......
  ========================================================================
  You can now connect to this MongoDB server using:
  mongo admin -u admin -p NQ1VmsSWUwF1 --host  --port
  Please remember to change the above password as soon as possible!
  ========================================================================
  ......
  输出中的 NQ1VmsSWUwF1 就是admin用户的密码
  还可以利用环境变量在容器启动时指定密码:
  [root@docker1 Mongodb]# docker run -d -p 27017:27017 =p 37017:22 -e MONGODB_PASS="mypass" mongodb
  甚至,设定不需要密码:
  [root@docker1 Mongodb]# docker run -d 27017:27017 -p 28017:28017 -e AUTH=no mongodb
  同样,读者可以使用-v参数来映射本地目录到容器。
  ⑦ 详细启动参数:
  Mongodb的启动参数有很多,包括:
  --quiet                #安静输出
  --port arg            #指定服务端口号,默认端口27017
  --bind_ip arg       #绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
  --logpath arg       #指定Mongodb日志文件,注意是指定文件不是目录
  --logappend        #使用追加的方式写日志
  --pidfilepath arg  #PID File的完整路径,如果没有设置,则没有PID文件
  --keyFile arg       #集群的私钥的完整路径,只对于Replica Set架构有效
  --unixSocketPrefix arg    #UNIX域套接字替代目录,(默认为/tmp)
  --fork                  #以守护进程的方式运行MongoDB,创建服务器进程
  --auth                 #启用验证
  --cpu                  #定期显示CPU的利用率和iowait
  --dbpath arg       #指定数据库路径
  --dialog arg        #diaglog选项 0=off 1=w 2=R 3=both 7=W+some reads
  --directoryperdb  #设置每个数据库将被保存在一个单独的目录
  --journal             #启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
  --journalOptions arg  #启用日志诊断选项
  --ipv6                 #启用ipv6选项
  --jsonp               #允许JSONP形式通过HTTP访问(有安全影响)
  --maxConns args   #最大同时连接默认2000
  --noauth             #不启用验证
  --nohttpinterface   #关闭http接口,默认关闭27018端口访问
  --noprealloc        #禁用数据文件预分配(往往影响性能)
  --noscripting       #禁用脚本引擎
  --notablescan      #不允许表扫描
  --noubixsocket    #禁用Unix套接字监听
  --nssize arg (=16)  #设置信数据库.ns文件大小(MB)
  --objcheck          #在收到客户数据,检查的有效性
  --profile arg        #档案参数 0=off 1=slow 2=all
  --quota               #限制每个数据库的文件数,设置默认为8
  --quotaFiles arg  #number of filess allower per db, requires --quota
  --rest                  #开启简单的rest API
  --repair               #修复所有数据库run repair on all dbs
  --repairpath arg  #修复库生成的文件的目录,默认为目录名称dbpath
  --slowms arg (=100)    #value of slow for profile and console log
  --smallfiles          #使用较小的默认文件
  --syncdelay arg (=60)   #数据写入磁盘的时间秒数(0=never,不推荐)
  --sysinfo             #打印一些诊断系统信息
  --upgrade           #如果需要升级数据库  * Replication 参数
  ---------------------------------------------------------------------------------------------------
  --fastsync           #从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
  --autoresync       #如果从库与主库同步数据差得多,自动重新同步
  --oplogSize arg    #设置oplog的大小(MB)   * 主/从参数
  ---------------------------------------------------------------------------------------------------
  --master             #主库模式
  --slave                #从库模式
  --source arg        #从库 端口号
  --only arg            #指定单一的数据库复制
  --slavedelay arg  #设置从库同步主库的延迟时间   * Replica set(副本集)选项
  --------------------------------------------------------------------------------------------------
  --relSet arg         #设置副本集名称  * Sharding(分片)选项
  --------------------------------------------------------------------------------------------------
  --configsvr          #声明这是一个集群的config服务,默认端口为27019,默认目录/data/configdb
  --shardsvr           #声明这是一个集群的分片,默认端口27018
  --noMoveParanoia   #关闭偏执为moveChunk数据保存
  上述参数也可以直接在mongod.conf配置文件中配置,例如:
  dbpath = /data/mongodb
  logpath = /data/mongodb/mongodb.log
  logappend = true
  fork = true
  auth = true
  ………………………………………………………………………………………………………………………………………………………
  mongodb-linux-x86_64-rhel70-3.6.0安装源码包              http://down.51cto.com/data/2369559
  pwgen-2.08.tar                    http://down.51cto.com/data/2369589


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-626033-1-1.html 上篇帖子: mongodb 验证登录 下篇帖子: mongoDB 启动与停止
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表