Shell map實現Docker簡單部署指令碼
隨著docker的流行,docker的應用越來越多,工作中肯定少不了,但個人感覺docker的有些命令需要的引數有點多,比如執行一個容器,–name給容器起名,-d後臺執行等等。根據個人習慣,一般很多引數都是固定的,沒必要每次操作都敲一遍,工作效率特別低。特別是對於不熟悉docker的人員,比如運維人員,這時候給他們提供一個部署指令碼是很有必要的,因為越是能簡化他們的工作,他們找我們解決問題的機會就更少。
前段時間實現了一個很簡單的部署指令碼,可以簡化docker安裝、容器執行等工作,根據傳給指令碼的第一個引數作為命令而進行不同的處理。對於不同的命令在shell中使用case來進行匹配不同的處理,後來發現隨著命令的增多,case匹配的程式碼越來越長,而且需要修改多處地方,修改很費勁,畢竟處理實現功能處理外,還需要提供一些幫助資訊。
這兩天一直想著怎麼改進這指令碼怎麼寫,讓它可以很好的擴充套件,新增新命令更簡單。經過一個晚上的思考及在網上搜索,最終主要使用map簡化case操作,最後寫成的指令碼個人還是挺滿意的,新增一個命令時不會修改原有的程式碼,只需要在同一個地方新增新程式碼,在map中新增幫助資訊,另外再對應新增一個處理函式就好。具體實現如下,指令碼中只是添加了幾個簡單命令:
#!/bin/bash
#宣告一個命令幫助容器,執行指令碼時輸入的第一個引數當作命令,根據命令做不同處理
declare -A cmdHelpMap=()
redColor="\033[31m"
normalColor="\033[0m"
yellowColor="\033[33m"
scriptName=$0 #執行的指令碼名字
inputArgsNum=$# #執行指令碼時輸入引數的個數
#列印資訊,對列印資訊進行查詢指令碼名字,紅色列印需要傳遞的引數
function println()
{
findScriptName=0 #是否找到指令碼名字
index=0 ;
#遍歷列印資訊
for arg in [email protected]
do
if [ ${arg} = ${scriptName} ]
then
findScriptName=1
echo -en "\n\t"
fi
if [ ${index} -gt ${inputArgsNum} ]
then
echo -en ${redColor}
fi
echo -en "${arg} "
if [ ${findScriptName} -eq 1 ]
then
let index++
fi
done
echo -e ${normalColor}
}
#引數處理,判斷輸入引數個數與幫助資訊中需要的引數個數是否相等,不相等則列印幫助資訊並退出
function parameterHandling()
{
findScriptName=0
argsNum=0;
key=$1
helpMsg=${cmdHelpMap[$key]}
#遍歷幫助資訊總計需要輸入的引數個數,幫助資訊中出現指令碼名字後開始統計,
#自動以空格分割幫助資訊進行遍歷
for msg in ${helpMsg}
do
if [ ${findScriptName} -eq 1 ]
then
let argsNum++
fi
if [ ${msg} = ${scriptName} ]
then
findScriptName=1
fi
done
#引數個數不相等處理
if [ ${inputArgsNum} -ne ${argsNum} ]
then
println ${helpMsg}
exit
fi
}
#確認操作
function confirm()
{
echo -ne "${yellowColor}$* ?[y/n]${normalColor}"
read input
if [ -z ${input} ]
then
exit
fi
if [ ${input} != "y" ]
then
exit
fi
}
#############################################################################################
#新增命令只需要兩步:
#1、以命令為key,往cmdHelpMap中新增幫助資訊
#2、以命令為函式名定義命令處理函式
#例如以下的help命令
#help命令
cmdHelpMap["help"]="檢視幫助資訊: ${scriptName} help"
function help()
{
inputArgsNum=0
println "Usage:"
preFunc=${FUNCNAME[1]}
number=1;
for key in ${!cmdHelpMap[@]}
do
println ${number}.${cmdHelpMap[$key]}
let number++
done
}
#install命令
cmdHelpMap["install"]="安裝docker: ${scriptName} install"
function install()
{
docker -v
if [ $? -eq 0 ]; then
confirm Docker已安裝,確認是否繼續安裝
fi
curl -sSL https://get.daocloud.io/docker | sh
}
#run命令
cmdHelpMap["run"]="執行容器: ${scriptName} run [imageName:imageTag] [hostPort:containerPort]"
function run()
{
image=$2
containerName=${image/:/-}
port=$3
docker run -d --name ${containerName} --restart=always -p ${port} ${image}
if [ $? -ne 0 ]; then
println ${redColor}執行${containerName}失敗, 請檢查映象${image}是否存在
exit
fi
}
#rmi命令
cmdHelpMap["rmi"]="刪除映象: ${scriptName} rmi [imageName:imageTag]"
function rmi()
{
image=$2
confirm 確定刪除映象${image}
docker rmi ${image}
if [ $? -ne 0 ]; then
println ${redColor}刪除映象失敗, 請檢查映象${image}是否存在
fi
}
#rm命令
cmdHelpMap["rm"]="刪除容器: ${scriptName} rm [imageName-imageTag]"
function rm()
{
containerName=$2
docker rm -f ${containerName}
if [ $? -ne 0 ]; then
println ${redColor}刪除容器失敗, 請檢查容器${containerName}是否存在
fi
}
#############################################################################################
#如果第一個引數為空或者不存在map中,則預設第一個引數為help
cmd=$1
if [ -z $cmd ] || [ -z "${cmdHelpMap[$cmd]}" ]
then
if [ $# -ne 0 ]
then
println ${redColor}無效引數:$*
fi
cmd="help"
inputArgsNum=1
fi
#引數處理
parameterHandling $cmd
#執行相應處理函式
$cmd $*
指令碼直接儲存為deploy.sh,以下是一些簡單操作提示資訊的效果圖:
相關推薦
Shell map實現Docker簡單部署指令碼
隨著docker的流行,docker的應用越來越多,工作中肯定少不了,但個人感覺docker的有些命令需要的引數有點多,比如執行一個容器,–name給容器起名,-d後臺執行等等。根據個人習慣,一般很多引數都是固定的,沒必要每次操作都敲一遍,工作效率特別低。特別是
docker學習篇之docker簡單部署springboot
1、將docker檔案和打包的springboot專案放入linux伺服器 2、docker構建映象docker build -t receivetest .(此處有個小點) 3、docker images可以看到映象 4、執行映象docker run -d -p 8080:8000 r
從零使用docker簡單部署一個javaweb專案與mysql資料庫
centos 7 安裝docker: Docker 要求 CentOS 系統的核心版本高於 3.10 ,檢視本頁面的前提條件來驗證你的CentOS 版本是否支援 Docker 。使用 uname -r 檢視CentOS核心使用 root 許可權登入 Centos。確保 y
Shell 實現Docker MySQL5.7安裝及SQL指令碼執行
Linux Shell 實現Docker MySQL安裝及指令碼執行的目標: 1、實現MySQL5.7安裝 2、安裝完成後建立對應的賬號和資料庫例項表等 建立docker mysql容器例項 定義docker_mysql_install.sh #! /bin/bash #fi
用shell指令碼實現pxe自動化部署
我們大家對pxe應該都有一定的瞭解,下面看一下官方的解釋: PXE(preboot execute environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支援工作站通過網路從遠端伺服器下載映像,並由此支援通過網路啟動
一個簡單的shell指令碼:一鍵部署tomcat及釋出簡單程式指令碼
測試環境中一鍵部署的一個小指令碼,這裡記錄下,方便想聯絡的人進行參考 環境介紹: 作業系統cos7.4 jdk版本:1.8 中介軟體服務版本:tomcat7.0.75 ——————————————以下是指令碼內容—————————————————————————
Jenkins加Shell實現最簡單的持續部署
大量的有關持續整合的書籍與文件中,基本都提到了持續部署這個步驟,然而具體怎麼實現,並沒有通行的做法,對於典型的Java Web應用來說,大致有兩個思路,一是通過web容器(如Tomcat、JBoss)提供的介面部署,這方面的代表就是Cargo,然而,其缺點是配置複雜且不夠穩
Shell指令碼實現---Swarm叢集部署例項(Swarm Cluster)
Shell指令碼實現---Swarm叢集部署例項(Swarm Cluster) 一、機器環境(均是centos7.8) IP hostname 角色 192.168.10.200 manager-swarm manager節點 192.168.10.201 nod
用harbor實現docker registry用於kolla部署openstack
docker harbor kolla 一, 準備docker環境 (一)docker 版本介紹 隨著Docker的不斷流行與發展,docker公司(或稱為組織)也開啟了商業化之路,Docker 從 17.03版本之後分為 CE(Community
Map實現java緩存機制的簡單實例
個數 charset shm run 測試的 分享 初始化 tty tco 緩存是Java中主要的內容,主要目的是緩解項目訪問數據庫的壓力以及提升訪問數據的效率,以下是通過Map實現java緩存的功能,並沒有用cache相關框架。 一、緩存管理類 CacheMgr.java
使用docker超簡單部署自己的ghost博客
ghost 博客 阿裏雲 docker 使用阿裏雲容器服務部署Ghostblog 使用阿裏雲鏡像安裝mysql數據庫服務 mysqldbtest: restart: always ports: - ‘3306:3306/tcp‘ environment: -
記錄第一次簡單部署asp.netcore程序到Docker上
國內 amp strong info tar 出現 服務 option har linux版本:centOS7 1.安裝docker :yum -y install docker-io 2.安裝dontnetcore鏡像:docker pull microsoft/
jenkins和docker實現自動化構建部署
TE 場景 ins 部署 提交 jenkin 工作 cat 構建 應用場景 程序員開發應用,開發後需要提交svn,然後從svn拉取代碼,進行構建,發布到tomcat中,發布,然後看呈現效果,這樣的工作是頻繁反復的在進行的,浪費了程序員的大量時間,那麽能不能把這些工作自動化
shell腳本基礎 -----簡單腳本的實現
gin ims exp shell 內容 第一個 快速 wid soft 運行環境:centos7一、shell腳本的簡單介紹shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。-- shell是一
開發測試環境通過gitlab+jenkins+docker 實現一命令部署
jpg ins text mark git pull bho 命令 gitlab 技術分享 開發測試環境的CI/CD 拓撲圖,程序員端執行git push之後,gitlab 的webhook 會觸發Jenkins上的任務,jenkins 在開發測試環境執行已定義好的shel
docker-compose, docker registry2,Python 指令碼 自動化 部署 spring boot 進銷存系統
準備環境 虛擬機器兩臺 centos 7.2 192.168.255.128 centos 7.2 192.168.255.129 maven 3.0.5 java 1.8.0_181 git version 1.8.3.1 Python 2.7.5 docker r
Docker bridge-utils 工具簡單部署
bridge-utils 網橋檢視工具 # 1、安裝 檢視橋接工具 yum install -y bridge-utils # 2、檢視橋接 命令brctl show bridge name bridge id STP enabled i
微服務+Jenkins 簡單的linux自動部署指令碼
No.1 啟停指令碼 #!/bin/bash ## 載入配置,避免獲取不到java_home source /etc/profile SERVICE_HOME=專案路徑 SERVICE_NAME=服務名稱 cd $SERVICE_HOME/$SERVICE_NAM
Shell實現Docker環境準備和應用服務執行
考慮問題 還是根據之前的Shell編寫經驗,本文需要注意幾個問題: Docker 的容器IP獲取 如何進入MySQL容器執行資料庫指令碼 Docker應用映象的匯入匯出 Shell 指令碼sed -i 修改XML引數空格問題導致引數個數解析多於預期 如何設計
Shell實現Docker環境檢測和安裝
shell指令碼執行的是bash語法,這裡定一個docker_install函式: function docker_install() { echo "檢查Docker......" docker -v if [ $? -eq 0 ]; then echo "檢