此處將不再介紹Docker相關知識,有興趣的同學可自行瞭解
複製內容到映象
格式爲:COPY <src> <dest>
複製本地主機的<src>(爲Dockerfile所在目錄的相對路徑,檔案或目錄)下內容到映象中的<dest>。目標路徑不存在時,會自動建立
路徑同樣支援正則表格式
新增內容到映象
格式爲ADD <src> <dest>
該命令將複製指定的<src>路徑下內容到容器中的<dest>路徑下
其中<src>可以是Dockerfile所在目錄的一個相對路徑(檔案或目錄),也可以是一個URL;換可以使一個tar檔案(自動解壓爲目錄),<dest>可以是映象內的絕對路徑,或者相對於工作目錄(WORKDIR)的相對路徑
執行指定命令
格式爲RUN <command>或 RUN ["executable" , "param1" , "param2"]。注意後者指令會被解釋爲JSON陣列,因此必須用雙引號。前者預設將在shell終端中執行命令,即/bin/sh -c ;後者則使用exec執行,不會啓動shell環境
指定使用其他終端型別可以通過第二種方式實現,例如 RUN [ "/bin/bash" , "-c" , "echo hello" ]
每條RUN指令將在當前映象基礎上執行指定命令,並提交爲新的映象層,當命令較長時可使用\來換行
eg: RUN yum -y install pwgen && \
yum -y install net-tools
ENTRYPOINT後面的命令和參數爲映象的預設入口命令, 該入口命令會在啓動容器時作爲根命令執行, 所有傳人值作爲該命令的參數。
支援兩種格式:
ENTRYPOINT ["executable", "paraml ", "param2"]: exec 呼叫執行;
ENTRYPOINT command param 1 param2: shell 中執行。
此時,CMD指令指定值將作爲根命令的參數。
每個 Dockerfile 中只能有一個ENTRYPOINT, 當指定多個時, 只有最後一個起效。
在執行時, 可以被 --entrypoint 參數覆蓋掉, 如 docker run --entrypoint。
CMD 指令用來指定啓動容器時預設執行的命令
支援三種格式:
CMD ["executable ","paraml","param2 " ]:相當於執行 executable param1 param2,推薦方式;
CMD command param2 :在預設的 Shell 中執行,提供給需要互動的應用;
CMD [ "param1","param2" ]:提供給 ENTRYPOINT 的預設參數
每個Dockerfile 只能有一個 CMD 命令,如果指定了多條命令,只有最後一條會被執行
如果使用者啓動容器時候手動指定了執行的命令(作爲 run命令的參數),則會覆蓋掉CMD 指定的命令
將Dockerfile、run.sh、set_mongodb_passwod.sh,mongodb-org-4.4.repo文化部放到同一個資料夾下
在裝有docker環境的機器上,執行docker build -f MongodbDockerfile -t mongodb:v1 .
#注意末尾的上下文"."不能少
映象建立成功後執行映象建立容器:
docker run -itd -v /data/mongodb:/mongodb_data -e auth=yes -e dbpath=/mongodb_data/db -e syslog=/mongodb_data/logs -p 27007:27017 -p 28007:28017 --name mongodb mongodb:v1
#dbpath數據檔案的存放路徑,MONGODB_PASS爲mongodb設定的密碼使用者爲admin密碼預設爲111111
#auth=yes表示開啓安全認證
FROM centos:latest
MAINTAINER docker_user ([email protected])
ADD mongodb-org-4.4.repo /etc/yum.repos.d/mongodb-org-4.4.repo
RUN yum clean all && \
yum makecache
RUN yum -y install mongodb-org-4.4.0 mongodb-org-server-4.4.0 mongodb-org-shell-4.4.0 mongodb-org-mongos-4.4.0 mongodb-org-tools-4.4.0 && \
yum clean all && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /data/db
VOLUME /data/db
ENV AUTH yes
#新增指令碼
ADD run.sh /run.sh
ADD set_mongodb_password.sh /set_mongodb_password.sh
RUN pwd
RUN chmod 755 ./*.sh
EXPOSE 27017
EXPOSE 28017
CMD ["/run.sh"]
#!/bin/bash
#-f /.mongodb_password_set存在且爲普通檔案爲真
# /.mongodb_password_set檔案不存在設定mongodb密碼
if [[ ${dbpath} ]] ; then
if [[ ! -a ${dbpath} ]] ; then
mkdir -p ${dbpath}
fi
fi
if [[ ! -f ${syslog:-/data/logs/}"log.log" ]] ; then
mkdir -p ${syslog:-/data/logs}
echo "" > ${syslog:-/data/logs}"/log.log"
fi
if [ ! -f /.mongodb_password_set ]; then
/set_mongodb_password.sh
fi
#export mongodb="numactl --interleave=all "
if [ "$auth" == "yes" ] ; then
#這裏讀者可以自己設定 MongoDB 的啓動參數
export mongodb=$mongodb"/usr/bin/mongod --nojournal --auth --dbpath ${dbpath:-/data/db} "
else
export mongodb=$mongodb"/usr/bin/mongod --nojournal --dbpath ${dbpath:-/data/db} "
fi
export mongodb=$mongodb" --bind_ip 0.0.0.0 "
#4.4沒有這兩個參數
#export mongodb=$mongodb" --httpinterface --rest"
if [ ! -f ${dbpath:-/data/db}"/mongod.lock" -a ! -f ${dbpath:-/data/db}/"WiredTiger.lock" ] ; then
sc=$(ps -aux | grep 'mongod' | grep -v grep | awk '{print $2}');if [[ $sc ]];then echo "mongodb.lock and WiredTiger.ock file line======== $sc" ;kill -9 $sc;fi && echo $mongodb && eval $mongodb
else
rm ${dbpath:-/data/db}/mongod.lock
rm ${dbpath:-/data/db}/WiredTiger.lock
rm -rf ${logpath:-/data/logs}
echo "mongodb.lock and WiredTiger.ock file alredy delete ========================="
# mongod.lock /WiredTiger.lock 檔案會在啓動時自動建立,並且在正常停止之前自動刪除,因此非正常停止會存在,需要使用--repair修復數據庫
mongod --dbpath ${dbpath:-/data/db} --repair && sc=$(ps -aux | grep 'mongod' | grep -v grep | awk '{print $2}');if [[ $sc ]];then echo $sc ;kill -9 $sc;fi && echo $mongodb && eval $mongodb
fi
#!/bin/bash
if [ -f /.mongodb_password_set ] ; then
echo "mongoDB password already set!"
exit 0
fi
/usr/bin/mongod --dbpath ${dbpath:-/data/db} --bind_ip 0.0.0.0 --nojournal &
PASS=${MONGODB_PASS:-111111}
_word=$( [ ${MONGODB_PASS} ] && echo "preset" || echo "random" )
RET=1
while [[ RET -ne 0 ]] ; do
echo "=> Waiting for confirmation of MongoDB service startup"
sleep 8
echo "mongodb create user:admin password:${PASS}"
sc=$(ps -aux | grep 'mongod ' | grep -v grep | awk '{print $2}');
echo "-----------------------------------sc : ${sc} : $(ps -axu)"
if [[ $sc ]];then
mongo admin --eval "db.auth('admin','$PASS')" | grep -q "Authentication failed"
flag=$?
fi
echo "-----------------------------------flag : ${flag}"
if [[ flag -eq 0 ]] ; then
mongo admin --eval "db.createUser({user:'admin',pwd:'$PASS',roles:[{role:'root',db:'admin'}]})" 2>&1
RET=$?
else
if [[ $sc ]];then
mongo admin --eval "--help" 2>&1
RET=$?
fi
fi
echo "------------------------------------RET: $RET"
done
該檔案爲yum源,可獲取最新的mongodb4.4版本
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc