shell自動拉取鏡像并運行容器的shell腳本
情景再現(xiàn)
最近有一個部署服務(wù),是具有絕對外網(wǎng)隔離的環(huán)境,不能構(gòu)建自動化的發(fā)布服務(wù),項目大體完工,但是改動的細(xì)節(jié)還是很多很小,存在一個頻繁的發(fā)版情況。為了方便的發(fā)版,我只能基于shell構(gòu)建一個簡單的自動化腳本
開發(fā)環(huán)境
腳本編輯工具:win10+vscode
腳本運行環(huán)境:centos7
開發(fā)過程
shell腳本基礎(chǔ)
Shell是一個用 C 語言編寫的程序。Shell 既是一種命令語言(腳本),又是一種程序設(shè)計語言。
簡單理解就是和windos中cmd一樣的一種命令語言,一種批處理的腳本類似的東西。
shell腳本的首行指定了shell腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行
#!/bin/bash
查看自己linux系統(tǒng)的默認(rèn)解析:echo $SHELL
[root@localhost ~]# echo $SHELL /bin/bash
echo 輸出文本,相當(dāng)于print命令,console命令
echo -e “\033[32m 綠色文字 \033[0m”
會輸出帶有顏色的文字,可以將我們自己的輸出和docker的輸出加以區(qū)分
完成代碼塊,運行腳本,輸入鏡像版本,將自動拉取指定版本鏡像并運行創(chuàng)建一個新的容器
#!/bin/bash cml_version="" cml_url="registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_2022${cml_version}_1" sudo echo -e "\033[32m --start-- \033[0m" sudo echo -e "\033[33m please input version: \033[0m" read -r cml_version cml_url="registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_2022${cml_version}_1" sudo echo -e "\033[33m cml_version: $cml_url \033[0m" sudo docker pull "$cml_url" sudo echo -e "\033[32m 1.pull image from route \033[0m" sudo docker stop c_llpcmlapi sudo docker rm c_llpcmlapi sudo echo -e "\033[32m 2.stop&rm c_llpcmlapi \033[0m" sudo docker rmi i_llpcmlapi sudo echo -e "\033[32m 3.rmi i_llpcmlapi \033[0m" sudo docker tag "$cml_url" i_llpcmlapi sudo echo -e "\033[32m 4.tag image \033[0m" docker run -di -v /home/llp_docker/llpcmlapi/appsettings.json:/appsettings.json --name c_llpcmlapi -p 8089:80 i_llpcmlapi sudo echo -e "\033[32m 5.run c_llpcmlapi \033[0m" sudo docker ps
遇到的問題
報錯:$‘\r’: command not found
解決: 由于shell腳本很簡單,我直接在windos下用記事本寫了一個.sh的文件,執(zhí)行的時候重視報錯各種錯誤,而且有時可能執(zhí)行成功,有時會失敗,猜測可能是編碼的問題,于是用vscode打開,重新保存,還是不行,后來了解到原來windows下編譯的shell文件,每一行的結(jié)尾是\n\r,而在linux下文件的結(jié)尾是\n,所以我們需要替換掉\r
cat -v 顯示window下的回車字符
tr -d ‘\r’ < 原始文件 > 新文件:替換文件中的回車字符
[root@localhost llpcode]# cat -v cmlapi.sh ^M sudo echo -e "\033[32m --start-- \033[0m"^M sudo docker pull registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_20220603_1 ^M sudo echo -e "\033[32m 1.pull image from route \033[0m"^M sudo docker rmi i_llpcmlapi^M sudo echo -e "\033[32m 2.rmi i_llpcmlapi \033[0m"^M sudo docker tag registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_20220603_1 i_llpcmlapi ^M sudo echo -e "\033[32m 3.tag image \033[0m"^M sudo docker stop c_llpcmlapi ^M sudo docker rm c_llpcmlapi ^M sudo echo -e "\033[32m 4.stop&rm c_llpcmlapi \033[0m"^M docker run -di -v /home/llp_docker/llpcmlapi/appsettings.json:/appsettings.json --name c_llpcmlapi -p 8089:80 i_llpcmlapi ^M sudo echo -e "\033[32m 5.run c_llpcmlapi \033[0m"^M sudo docker ps [root@localhost llpcode]# tr -d '\r' < cmlapi.sh > cmlapi_.sh [root@localhost llpcode]# ls blogcore cmlapi_.sh cmlapi.sh vue_xhg_cml
效果如下
報錯:read without -r will mangle backslashes.
解決:shell腳本缺少權(quán)限, chmod +x 腳本名稱 進(jìn)行權(quán)限賦值
報錯:read without -r will mangle backslashes.
解決:Read將解釋空格和換行符之前的反斜杠,通常您只想讀取數(shù)據(jù),這就是read -r所做的
報錯:$Permission denied
解決:shell腳本缺少權(quán)限, chmod +x 腳本名稱 進(jìn)行權(quán)限賦值
到此這篇關(guān)于shell自動拉取鏡像并運行容器的shell腳本的文章就介紹到這了,更多相關(guān)shell自動拉取鏡像并運行 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell腳本實現(xiàn)ssh-copy-id批量自動發(fā)送公鑰到遠(yuǎn)程主機
這篇文章主要介紹了shell腳本實現(xiàn)ssh-copy-id批量自動發(fā)送公鑰到遠(yuǎn)程主機的方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11Shell腳本把文件從GBK轉(zhuǎn)為UTF-8編碼
這篇文章主要介紹了Shell腳本把文件從GBK轉(zhuǎn)為UTF-8編碼,需要的朋友可以參考下2014-06-06Shell、Perl、Python、PHP訪問 MySQL 數(shù)據(jù)庫代碼實例
這篇文章主要介紹了Shell、Perl、Python、PHP訪問 MySQL 數(shù)據(jù)庫代碼實例,本文分別給出這幾種語言訪問Mysql數(shù)據(jù)的代碼實例,需要的朋友可以參考下2015-04-04