Shell 命令啟動(dòng)Docker Container的實(shí)現(xiàn)
Linux虛擬機(jī)重啟后,都要手動(dòng)啟動(dòng)多個(gè)Docker Container,著實(shí)麻煩,使用Shell命令可以減去這個(gè)麻煩。
創(chuàng)建文件,添加可執(zhí)行權(quán)限
touch startcontiner.sh chomd +x startcontainer.sh
編寫startcontainer.sh
#!/bin/sh ? ? ? ? ? ? ? ? ? ? ? ? ?
#chkconfig: 35 90 80 ? ? ? ? ? ? ??
#description: start docker container
containerNames="mysql redis rabbitmq mongo zookeeper"
# 根據(jù)名稱啟動(dòng)Docker Contianers
function startContainer(){
? ? sudo docker start $1
}
# 遍歷containerNames
for containerName in ${containerNames}
do
? ? ? ? echo "Container ${containerName} start"
? ? ? ? startContainer ${containerName}
done啟動(dòng)并測(cè)試
./startcontainer.sh
PS:docker 批量啟動(dòng)項(xiàng)目 shell 腳本
Dockerfile
FROM java:8? VOLUME /tmp? COPY blockchain-core-0.1.jar /project/app.jar CMD java -jar /project/app.jar?
文件目錄
docker/ ├── logs │ ? └── logs │ ? ? ? ├── block-chain-core │ ? ? ? │ ? ├── 2018-11-23 │ ? ? ? │ ? │ ? ├── access.0.log │ ? ? ? │ ? │ ? ├── debug.0.log │ ? ? ? │ ? │ ? ├── detail.0.log │ ? ? ? │ ? │ ? ├── error.0.log │ ? ? ? │ ? │ ? ├── execute.0.log │ ? ? ? │ ? │ ? └── info.0.log │ ? ? ? │ ? └── 2018-11-26 │ ? ? ? │ ? ? ? ├── access.0.log │ ? ? ? │ ? ? ? ├── debug.0.log │ ? ? ? │ ? ? ? ├── detail.0.log │ ? ? ? │ ? ? ? ├── error.0.log │ ? ? ? │ ? ? ? ├── execute.0.log │ ? ? ? │ ? ? ? └── info.0.log │ ? ? ? └── gateway-zuul │ ? ? ? ? ? ├── 2018-11-23 │ ? ? ? ? ? │ ? ├── access.0.log │ ? ? ? ? ? │ ? ├── debug.0.log │ ? ? ? ? ? │ ? ├── detail.0.log │ ? ? ? ? ? │ ? ├── error.0.log │ ? ? ? ? ? │ ? ├── execute.0.log │ ? ? ? ? ? │ ? └── info.0.log │ ? ? ? ? ? └── 2018-11-26 │ ? ? ? ? ? ? ? ├── access.0.log │ ? ? ? ? ? ? ? ├── debug.0.log │ ? ? ? ? ? ? ? ├── detail.0.log │ ? ? ? ? ? ? ? ├── error.0.log │ ? ? ? ? ? ? ? ├── execute.0.log │ ? ? ? ? ? ? ? └── info.0.log ├── projects │ ? ├── blockchain-core │ ? │ ? ├── app.jar │ ? │ ? ├── blockchain-core-0.1.jar │ ? │ ? └── Dockerfile │ ? ├── eureka-server │ ? │ ? ├── Dockerfile │ ? │ ? └── eureka-server-1.0.jar │ ? └── gateway-zuul │ ? ? ? ├── app.jar │ ? ? ? ├── Dockerfile │ ? ? ? └── gateway-zuul-0.0.1.jar ├── run
腳本
#!/bin/bash
#serverList=("eureka-server" "gateway-zuul" "blockchain-core" "blockchain-order");
#------------配置 start-------------
# 項(xiàng)目目錄
projectsDir="/opt/docker/projects"
# 日志輸出目錄
logsDir="/opt/docker/logs"
#------------配置 end-------------
serverList=`ls ${projectsDir}`;
commond=$1;
serverName=$2;
port=$3;
# 啟動(dòng)服務(wù)方法 第一個(gè)參數(shù)為 服務(wù)名,第二個(gè)參數(shù)為 端口
function startServer(){
?? ?echo "--------------啟動(dòng)項(xiàng)目開始:$1 ?$2"
?? ?serverCount=`docker ps -f status=exited | grep $1 |wc -l`;
?? ??? ?# 判斷是否已經(jīng)啟動(dòng)過,且端口為默認(rèn)端口
? ? ? ? if [[ ${serverCount} > 0 && $2 == "" ]];then
? ? ? ? ? ? ? ? echo "docker start 啟動(dòng)項(xiàng)目:$1"
? ? ? ? ? ? ? ? docker start $1
? ? ? ? else?
? ? ? ? ?? ??? ?# 判斷是否生成了鏡像
? ? ? ? ?? ??? ?imageCount=`docker images | grep $1 | wc -l`;
? ? ? ? ?? ??? ?if [[ ${imageCount} > 0 ]];then
?? ? ? ? ? ? ? ? ? ?echo "docker run 啟動(dòng)項(xiàng)目: $1"
?? ? ? ? ? ? ? ? ? ?# 復(fù)制項(xiàng)目jar包為 app.jar
?? ? ? ? ? ? ? ? ? ?currProjectDir=$projectsDir/$1
?? ? ? ? ? ? ? ? ? ?cd $currProjectDir
?? ? ? ? ? ? ? ? ? ?cp `ls | grep $1` "app.jar"
?? ? ? ? ? ? ? ? ? ?# 執(zhí)行命令
?? ? ? ? ? ? ? ? ? ?if [[ $2 == "" ]];then
?? ? ? ? ? ? ? ? ? ??? ?echo "docker run ?-d -v ${logsDir}:/opt -v $currProjectDir:/project ?--name $1 $1 "
?? ? ? ? ? ? ? ? ? ??? ?docker run ?-d -v ${logsDir}:/opt -v $currProjectDir:/project ?--name $1 $1?
?? ? ? ? ? ? ? ? ? ?? ?else
?? ? ? ? ? ? ? ? ? ?? ??? ?echo "docker run ?-d -p $2:$2 -v ${logsDir}:/opt -v ${currProjectDir}:/project --name $1_$2 $1 java -jar /project/app.jar --server.port=$2"
?? ? ? ? ? ? ? ? ? ?? ??? ?docker run ?-d -p $2:$2 -v ${logsDir}:/opt -v ${currProjectDir}:/project --name $1_$2 $1 java -jar /project/app.jar --server.port=$2
?? ? ? ? ? ? ? ? ? ?? ?fi
?? ? ? ? ? ? ? ? else
?? ? ? ? ? ? ? ? ?? ?echo "生成 $1 項(xiàng)目鏡像:$1"
?? ? ? ? ? ? ? ? ?? ?
?? ? ? ? ? ? ? ? ?? ??? ?cd "${projectsDir}/$1"
?? ? ? ? ? ? ? ? ?? ?
?? ? ? ? ? ? ? ? ?? ?docker build -t $1 .
?? ? ? ? ? ? ? ? ?? ?# 再次調(diào)用該方法
?? ? ? ? ? ? ? ? ?? ?startServer $1 $2
?? ? ? ? ? ? ? ?fi
? ? ? ? fi
}
# 根據(jù)項(xiàng)目名獲取端口號(hào) 參數(shù)為項(xiàng)目名
function getPort(){
?? ?tempProjectDirName=`ls $projectsDir | grep $1`
?? ?OLD_IFS="$IFS";
?? ??? ?IFS="_"
?? ??? ?arr=($tempProjectDirName)
?? ??? ?IFS="$OLD_IFS"
?? ??? ?echo ${arr[1]}
?? ?return ${arr[1]}
}
if ?[[ ${commond} == "-help" ]];then?
?? ?echo " "
?? ?echo "參數(shù)1:執(zhí)行命令"
?? ?echo "?? ??? ?1. start?? ?啟動(dòng)"
?? ?echo "?? ??? ?2. stop?? ??? ?停止"
?? ?echo "?? ??? ?3. restart?? ?重啟"
?? ?echo "參數(shù)2:服務(wù)名"
?? ?echo "?? ??? ?1.eureka-server?? ??? ?服務(wù)注冊(cè)中心"
?? ?echo "?? ??? ?2.gateway-zuul?? ??? ?網(wǎng)關(guān)服"
?? ?echo "?? ??? ?3.blockchain-core?? ?系統(tǒng)服務(wù)服"
?? ?echo "?? ??? ?4.blockchain-order?? ?訂單服"
?? ?echo "?? ??? ?5.all?? ??? ??? ?全部"
?? ?exit;
elif [[ ${commond} == "" || ${serverName} == "" ]];then?
?? ?echo "錯(cuò)誤:請(qǐng)傳入啟動(dòng)參數(shù)!詳情:-help"
? ? ? ? exit;?
fi
# 單個(gè)項(xiàng)目操作
if [[ ${serverName} != "all" && ${commond} == "start" ]];then
?? ?
?? ?startServer ${serverName} ${port}
?? ?
elif [[ ? ${serverName} != "all" && ${commond} != "start" ]];then
?? ?echo "開始${commond}容器中的項(xiàng)目:${serverName}"
?? ?docker ${commond} `docker ps | grep ${serverName} | awk -F" ? ? ? ?" '{print $1 }'`
fi
# 全部項(xiàng)目操作
# IFS=";\n"
if [[ ${serverName} == "all" && ${commond} == "start" ?]];then
?? ?for server in ${serverList[@]}
?? ?do
?? ??? ?startServer ${server}?
?? ?
?? ?done
elif [[ ${serverName} == "all" && ${commond} != "start" ]]; then
?? ?for server in ${serverList[@]}
?? ?do
?? ??? ?echo "開始 ${commond} 容器中的項(xiàng)目:${server}"
?? ??? ?docker ${commond} `docker ps | grep ${serverName} | awk -F" ? ? ? ?" '{print $1 }'`
?? ?
?? ?done
fi
echo "執(zhí)行完畢!"到此這篇關(guān)于Shell 命令啟動(dòng)Docker Container的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Shell啟動(dòng)Docker Container內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell腳本批量重命名文件后綴的3種實(shí)現(xiàn)
這篇文章主要介紹了Shell腳本批量重命名文件后綴的3種實(shí)現(xiàn),本文分別使用find + xargs +sed、for循環(huán)、rename等3種方法實(shí)現(xiàn)重命名文件后綴,需要的朋友可以參考下2014-09-09
Linux里awk中split函數(shù)的用法小結(jié)
The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep2013-03-03
實(shí)時(shí)查看系統(tǒng)流量的Shell腳本分享
這篇文章主要介紹了實(shí)時(shí)查看系統(tǒng)流量的Shell腳本分享,本文直接給出實(shí)現(xiàn)代碼,使用時(shí)保存到一個(gè)sh文件中并運(yùn)行即可,需要的朋友可以參考下2014-12-12
關(guān)于Shell腳本效率優(yōu)化的一些個(gè)人想法
很想像之前的一片Mysql全面優(yōu)化詳解那樣子寫一篇全面的優(yōu)化文章,但是苦于沒有相關(guān)書籍參考,也沒有發(fā)現(xiàn)網(wǎng)絡(luò)牛人有總結(jié)帖或文章之類的,所以就根據(jù)個(gè)人理解和經(jīng)驗(yàn)寫一些能優(yōu)化程序效率的東西吧。這篇是不敢稱全面的2012-09-09
Linux?shell進(jìn)行文件解壓,復(fù)制和移動(dòng)詳解
Linux下進(jìn)行文件的解壓、復(fù)制、移動(dòng)應(yīng)該是最常見的操作了。尤其是我們?cè)陧?xiàng)目中使用大量的數(shù)據(jù)集文件時(shí)。本文我們就來細(xì)數(shù)用Shell進(jìn)行文件操作的這些坑2022-05-05
Linux文本查看命令及其選項(xiàng)詳解(cat,head,tail)
這篇文章主要介紹了Linux文本查看命令及其選項(xiàng)詳解(cat,head,tail),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

