【系列8】使用Dockerfile创建带MongoDB的Centos Docker镜像
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 + id可以看到下面的输出
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 <host> --port <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 ID CREATED SIZE
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 ID IMAGE COMMAND CREATED STATUS PORTS NAMES
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 <host> --port <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
转载于:https://blog.51cto.com/sf1314/2056670
【系列8】使用Dockerfile创建带MongoDB的Centos Docker镜像相关推荐
- 【系列7】使用Dockerfile创建带mysql的Centos Docker镜像
下面用官方的rpm源包安装mysql过慢不主张采用yum这种方式 1. 下载文件 从GitHub Dockerpool社区下载MySQL镜像项目: [root@docker1 ~]# git c ...
- 【系列5】使用Dockerfile创建带weblogic的Centos Docker镜像
Weblogic是一个基于Java EE架构的中间件(应用服务器),WebLogic由Oracle公司维护. WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的J ...
- 基于Dockerfile创建一个最简单的docker镜像
试着创建一个docker image, 不在乎实用性和功能,只是对docker 创建image 有个大概的了解,所以有此文章. 文章目录 step1. 创建文件夹 step2. 进入文件夹 step3 ...
- 创建带Tomcat服务的Centos Docker镜像
Tomacat服务器是一个免费的开源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下普遍使用,是开发和高度JSP程序的首选. 下面我就分步骤向大家介绍如何创建 ...
- 创建支持nginx服务的docker镜像
环境: [root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@linux-n ...
- 【系列7】使用Dockerfile创建带mysql5.7的Centos Docker镜像1
1.进入Linux后,使用Docker命令下载MySQL,命令如: docker pull mysql:5.7 运行该命令后,则会显示以下日志: [root@localhost ~]# docker ...
- 创建带用户认证的docker私有仓库与管理
下载registry 镜像 registy为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库. docker pull registry cd /opt/ 创建一个auth ...
- 如何创建一份springboot的docker镜像
2019独角兽企业重金招聘Python工程师标准>>> FROM centos:7 ENV JAVA_HOME /usr/java/jdk1.7.0_55 ENV MAC_PUBLI ...
- kubernetes 用dockerfile 创建jenkins容器
dockerfile 创建jenkins 下载链接 :Docker Hub jenkins_for_Centos版本 ##这里用的是jenkinsforCentos版本 [root@hy-202 ~] ...
最新文章
- oracle中set怎么用,sqlplus命令格式以及sqlplus中set的用法与解释-Oracle
- dev 点击子控件触发panelcontrol事件_LINUX IIO子系统分析之二 IIO子系统数据结构分析...
- 打造轻量化的View Controller
- 关于main函数中argc和argv的简单介绍
- 利用python 提取log 文件里的关键句子,并进行统计分析
- ASP.NET中进行消息处理(MSMQ) 一
- test.php.bak,MongoDB热备份工具:解决官方版备份缺陷
- 点歌台 PHP,MeMusic3.0 PHP在线点歌系统 - 下载 - 搜珍网
- 阿里巴巴在内蒙古旱区试水物联网灌溉技术,一年省出1.5个西湖 1
- 命名实体识别实践 - CRF
- Treeview的文件目录配置
- php709,深度爆料评测bt2020与bt709有什么区别?哪个好?良心点评实际情况
- 高通9008刷机,刷机参考
- 【shell】数值加减乘除|字符串转换成数字|提取数字字母小数
- Vue - Todos 案例
- 用python做动画的代码_Python应用 | 三行代码实现GIF动画
- springboot过滤器和拦截器使用
- linux yield_通俗易懂的了解——Linux线程模型和线程切换
- Java新手入门200例122之通过Java反射操作成员变量,set 和 get
- 超硬核!操作系统学霸笔记,考试复习面试全靠它
热门文章
- react 当前时间_React教程-State 生命周期
- python程序化 k线指定时间更新_Python获取股票历史、实时数据与更新到数据库
- python程序员面试自我介绍_如何拿到面试公司一半Offer——我的Python求职之路
- java 方法 时间_Java 方法
- 计算机的关机键,怎么让电脑按关机键后不关机?让电脑主机上关机键失效的方法...
- php 怎么复制一个文件,php如何复制文件夹?
- python大文件排序_Python如何实现大文件排序?Python大文件排序的实现方法
- 正向有功正向无功_电表_正向有功、反向无功
- zimbra mysql管理_zimbra 命令行管理
- python编译so_Mac上把python源文件编译成so文件