Shell 命令啟動Docker Container的實現(xiàn)
Linux虛擬機重啟后,都要手動啟動多個Docker Container,著實麻煩,使用Shell命令可以減去這個麻煩。
創(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ù)名稱啟動Docker Contianers function startContainer(){ ? ? sudo docker start $1 } # 遍歷containerNames for containerName in ${containerNames} do ? ? ? ? echo "Container ${containerName} start" ? ? ? ? startContainer ${containerName} done
啟動并測試
./startcontainer.sh
PS:docker 批量啟動項目 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------------- # 項目目錄 projectsDir="/opt/docker/projects" # 日志輸出目錄 logsDir="/opt/docker/logs" #------------配置 end------------- serverList=`ls ${projectsDir}`; commond=$1; serverName=$2; port=$3; # 啟動服務方法 第一個參數(shù)為 服務名,第二個參數(shù)為 端口 function startServer(){ ?? ?echo "--------------啟動項目開始:$1 ?$2" ?? ?serverCount=`docker ps -f status=exited | grep $1 |wc -l`; ?? ??? ?# 判斷是否已經(jīng)啟動過,且端口為默認端口 ? ? ? ? if [[ ${serverCount} > 0 && $2 == "" ]];then ? ? ? ? ? ? ? ? echo "docker start 啟動項目:$1" ? ? ? ? ? ? ? ? docker start $1 ? ? ? ? else? ? ? ? ? ?? ??? ?# 判斷是否生成了鏡像 ? ? ? ? ?? ??? ?imageCount=`docker images | grep $1 | wc -l`; ? ? ? ? ?? ??? ?if [[ ${imageCount} > 0 ]];then ?? ? ? ? ? ? ? ? ? ?echo "docker run 啟動項目: $1" ?? ? ? ? ? ? ? ? ? ?# 復制項目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 項目鏡像:$1" ?? ? ? ? ? ? ? ? ?? ? ?? ? ? ? ? ? ? ? ?? ??? ?cd "${projectsDir}/$1" ?? ? ? ? ? ? ? ? ?? ? ?? ? ? ? ? ? ? ? ?? ?docker build -t $1 . ?? ? ? ? ? ? ? ? ?? ?# 再次調(diào)用該方法 ?? ? ? ? ? ? ? ? ?? ?startServer $1 $2 ?? ? ? ? ? ? ? ?fi ? ? ? ? fi } # 根據(jù)項目名獲取端口號 參數(shù)為項目名 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?? ?啟動" ?? ?echo "?? ??? ?2. stop?? ??? ?停止" ?? ?echo "?? ??? ?3. restart?? ?重啟" ?? ?echo "參數(shù)2:服務名" ?? ?echo "?? ??? ?1.eureka-server?? ??? ?服務注冊中心" ?? ?echo "?? ??? ?2.gateway-zuul?? ??? ?網(wǎng)關(guān)服" ?? ?echo "?? ??? ?3.blockchain-core?? ?系統(tǒng)服務服" ?? ?echo "?? ??? ?4.blockchain-order?? ?訂單服" ?? ?echo "?? ??? ?5.all?? ??? ??? ?全部" ?? ?exit; elif [[ ${commond} == "" || ${serverName} == "" ]];then? ?? ?echo "錯誤:請傳入啟動參數(shù)!詳情:-help" ? ? ? ? exit;? fi # 單個項目操作 if [[ ${serverName} != "all" && ${commond} == "start" ]];then ?? ? ?? ?startServer ${serverName} ${port} ?? ? elif [[ ? ${serverName} != "all" && ${commond} != "start" ]];then ?? ?echo "開始${commond}容器中的項目:${serverName}" ?? ?docker ${commond} `docker ps | grep ${serverName} | awk -F" ? ? ? ?" '{print $1 }'` fi # 全部項目操作 # 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} 容器中的項目:${server}" ?? ??? ?docker ${commond} `docker ps | grep ${serverName} | awk -F" ? ? ? ?" '{print $1 }'` ?? ? ?? ?done fi echo "執(zhí)行完畢!"
到此這篇關(guān)于Shell 命令啟動Docker Container的實現(xiàn)的文章就介紹到這了,更多相關(guān)Shell啟動Docker Container內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ubuntu使用root用戶登錄/切換root權(quán)限的實現(xiàn)
下面小編就為大家?guī)硪黄猽buntu使用root用戶登錄/切換root權(quán)限的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01linux?shell字符串截取的詳細總結(jié)(實用!)
在開發(fā)的時候經(jīng)常會自行寫一些小的腳本,其中就用到截取字符串的操作,這篇文章主要給大家介紹了關(guān)于linux?shell字符串截取的詳細方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07shell腳本實現(xiàn)磁盤監(jiān)控系統(tǒng)
這篇文章主要介紹了shell腳本實現(xiàn)磁盤監(jiān)控系統(tǒng),幫助大家更好的利用shell腳本管理數(shù)據(jù),感興趣的朋友可以了解下2020-09-09Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享
這篇文章主要介紹了Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-03-03