網(wǎng)站首頁 編程語言 正文
Linux虛擬機重啟后,都要手動啟動多個Docker Container,著實麻煩,使用Shell命令可以減去這個麻煩。
創(chuàng)建文件,添加可執(zhí)行權限
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 . ?? ? ? ? ? ? ? ? ?? ?# 再次調用該方法 ?? ? ? ? ? ? ? ? ?? ?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)關服" ?? ?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í)行完畢!"
原文鏈接:https://blog.csdn.net/qq_33423418/article/details/103096312
相關推薦
- 2023-05-06 Python數(shù)據(jù)容器dict(字典)的實現(xiàn)_python
- 2022-11-08 OpenCV圖像特征提取之Shi-Tomasi角點檢測算法詳解_C 語言
- 2022-12-14 C語言程序設計之指針的應用詳解_C 語言
- 2022-07-13 SpringCloud之http客戶端Feign
- 2022-03-30 圖文詳解nginx日志切割的實現(xiàn)_nginx
- 2022-12-24 Python創(chuàng)建增量目錄的代碼實例_python
- 2022-08-29 C語言關鍵字auto與register及static專項詳解_C 語言
- 2022-03-30 Android?RecyclerView曝光采集的實現(xiàn)方法_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支