YUM源建立的Dockerfile内容為:
[root@docker1 Mongodb]# vi Dockerfile
#設定從我們之前建立的sshd鏡像繼承
FROM sshd:centos
MAINTAINER waitfish from dockerpool.com
ADD mongodb-3.2.repo /etc/yum.repos.d/
RUN \
yum update -y && \
yum install -y mongodb-org && \ #這裡不推薦使用yum安裝monodb,實在下載下傳速度太慢
yum clean all
# 建立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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
FROM sshd:centos
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 /usr/local/mongodb
#設定環境變量
ENV PATH /usr/local/mongodb/bin:$PATH
#删除壓縮包
RUN rm -rf mongodb-linux-x86_64-rhel70-3.6.0.tgz pwgen-2.08.tar.gz
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 "Please remember to change the above password as soon as possible!"
④ run.sh腳本是主要的啟動腳本,内容為:
[root@docker1 Mongodb]# cat run.sh
if [ ! -f /.mongodb_password_set ]; then
/set_mongodb_password.sh
if [ "$AUTH" == "yes" ]; then
export mongodb='/usr/local/mongodb/bin/mongod --nojournal --auth --httpinterface --rest'
else
export mongodb='/usr/local/mondodb/bin/mongod --nojournal --httpinterface --rest'
if [ ! -f /data/db/mongod.lock ]; then
eval $mongodb
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
本文轉自 Mr_sheng 51CTO部落格,原文連結:http://blog.51cto.com/sf1314/2048024