1. 程式人生 > >Shell map實現Docker簡單部署指令碼

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 "檢