日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

容器化的 DevOps 工作流

發(fā)布時間:2023/12/4 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 容器化的 DevOps 工作流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對于 devops 來說,容器技術(shù)絕對是我們笑傲江湖的法寶。本文通過一個小 demo 來介紹如何使用容器技術(shù)來改進(jìn)我們的 devops 工作流。

devops 的日常工作中難免會有一些繁瑣的重復(fù)性勞動。比如管理 Azure 上的各種資源,我們會使用 Azure CLI 工具。同時我們也會使用 Ansible 完成一些自動化的任務(wù)。當(dāng)我們同時使用二者的時候就會碰到一些尷尬的事情:Azure CLI 依賴的 python 版本為 3.x,而 Ansible 的主流版本還在依賴 python 2.x。如果我們要同時使用二者,就需要在環(huán)境中搞一些飛機(jī)。如果團(tuán)隊(duì)中的每個成員都需要使用這樣的工具,那么每個人的環(huán)境中都需要這些飛機(jī)!下面是一些比較類似的問題:

  • 一些工作流在陌生的環(huán)境中不能正確的工作

  • 在工作流中加入新的工具時,整個團(tuán)隊(duì)都需要獲取并安裝這些新的工具

  • 運(yùn)行 devops 工作流不能對當(dāng)前的環(huán)境產(chǎn)生影響(應(yīng)該允許在 build 環(huán)境中運(yùn)行 devops 工作流)

  • 工作流的變化不會對運(yùn)行環(huán)境產(chǎn)生任何的影響

實(shí)現(xiàn)這些需求的最好方式就是容器技術(shù)!通過容器把我們的 devops 工作流和運(yùn)行環(huán)境隔離開就可以了。文本的 demo 會演示一個非常簡單的使用 Azure CLI 的工作流,我們的目標(biāo)是為整個團(tuán)隊(duì)打造一個滿足以上需求的工具集(容器鏡像)。其大體步驟如下:

  • 創(chuàng)建構(gòu)造容器鏡像的 Dockerfile 文件

  • 在本地構(gòu)建容器鏡像并進(jìn)行測試

  • 對容器鏡像不斷的升級完善

  • 把容器鏡像分享給整個團(tuán)隊(duì)

構(gòu)建容器鏡像

讓我們使用 Dockerfile 來創(chuàng)建自己的容器鏡像。先創(chuàng)建目錄 cazurecli,并在目錄下創(chuàng)建 Dockerfile 文件:

$ mkdir cazurecli $ cd cazurecli $ touch Dockerfile

編輯 Dockerfile 文件的內(nèi)容如下:

FROM microsoft/azure-cli:latestCMD bash

其中的 FROM 指令用來指定 base 鏡像,這里我們直接使用了微軟提供的 azrue-cli 鏡像,只是把容器啟動時執(zhí)行的命令通過 CMD 指令設(shè)置為 bash。

然后執(zhí)行下面的命令構(gòu)建容器:

$ docker build -t azcli .

上圖的輸出顯示容器鏡像構(gòu)建成功,我們可以通過 azcli:latest 來引用新構(gòu)建的容器鏡像。那就讓我們啟動容器并執(zhí)行 azure cli 命令:

$ docker run --rm -it azcli:latest

進(jìn)入容器中的命令行后,嘗試通過 az account list 查看 azure 賬號信息:

bash-4.3# az account list

紅框中的信息是提示我們先通過 az login 命令登錄才能查看賬號信息:

bash-4.3# az login

然后按照提示信息打開瀏覽器,輸入驗(yàn)證碼進(jìn)行登錄。在瀏覽器中登錄完成后命令行上的登錄過程也隨之完成,然后重新執(zhí)行 az account list 命令:

這樣就可以輸出你的賬號信息了。

解決 Azure CLI 的登錄問題

如果你實(shí)驗(yàn)了 az login 命令,就會發(fā)現(xiàn)登錄的過程還是挺繁瑣的,如果每次啟動容器都需要執(zhí)行登錄操作你會怎么想呢?肯定是弱爆了!
好在我們可以通過 bind mount 的方式把 azure 的登錄信息保存在 host 的文件中。以后啟動容器時掛載這些登錄信息就可以了。下面是具體的步驟。
先在用戶的家目錄中創(chuàng)建 .azure 目錄:

$ mkdir ${HOME}/.zaure

然后啟動一個容器并以 bind 的模式掛載 .azure 目錄:

$ docker run --rm -it --mount type=bind,source=${HOME}/.azure,target=/root/.azure azcli

在容器中進(jìn)行一次登錄操作:

# az login

登錄完成后,登錄的信息被保存到了 /root/.azure 目錄中:

退出當(dāng)前的容器,執(zhí)行下面的命令創(chuàng)建一個新的容器:

$ docker run --rm -it --mount type=bind,source=${HOME}/.azure,target=/root/.azure azcli

然后再執(zhí)行一次 az account list 命令試試,這次就不需要登錄了!
注意:即便這樣也不是一勞永逸的,默認(rèn)的登錄信息過期時間為兩周,到時候你需要再次進(jìn)行登錄。

添加自定義的工作流

對于一名 devops 工程師來說,我們在 azure 上的操作多是一些枯燥的重復(fù)動作。
比如:

  • Start/Stop/Deallocate/Restart 數(shù)量眾多的虛機(jī)

  • 檢查大量的虛機(jī)狀態(tài)

  • 拿到 IP 地址后查出對應(yīng)的主機(jī)名稱等等

其實(shí)我們可以把這樣的功能進(jìn)行封裝,從而簡化具體的操作。下面我們舉個簡單的例子,就是把查詢 ResourceGroup 和虛機(jī)的操作封裝成 bash 中的函數(shù)。先在 cazurecli 目錄下創(chuàng)建 scripts 目錄:

$ mkdir scripts

然后在 scripts 目錄下創(chuàng)建 search.sh 文件:

$ touch scripts/search.sh

編輯 search.sh 文件的內(nèi)容如下:

#!/bin/bash


# search for Resource Group by name

function search-group () {

? ? query=$1

? ? az group list --query "[?name | contains(@,'$query')].{ResourceGroup:name}" -o table

}


# search for VM by name

function search-vms () {

? ? query=$1

? ? az vm list --query "[?name | contains(@,'$query')].{ResourceGroup:resourceGroup,Name:name}" -o table

}

在這段腳本中我們定義了兩個函數(shù),分別是通過名稱來查詢 ResourceGroup 和虛機(jī)(要了解相關(guān)的查詢語法,請參考 az 命令)。
下面我們把 search.sh 腳本集成到容器的鏡像中,并把腳本中的函數(shù)導(dǎo)入到 bash,編輯 Dockerfile 如下:


FROM microsoft/azure-cli:latest

COPY scripts/ scripts/

RUN echo -e "\

; for f in /scripts/*; \

do chmod a+x \${f}; source \${f}; \

done;" >> ~/.bashrc


CMD bash


用新的 Dockerfile 重新構(gòu)建容器鏡像:

$ docker build -t azcli .

創(chuàng)建容器并嘗試使用 search-group 和 search-vms 函數(shù):

$ docker run --rm -it --mount type=bind,source=${HOME}/.azure,target=/root/.azure azcli bash-4.3# search-group learnrg bash-4.3# search-vms testdesktop

這樣用起來是不是簡便很多了!如果我們把常用的操作都寫成腳本封裝起來,是不是就能夠打造一系列的自動化工作流了!

把鏡像放在 docker hub 上進(jìn)行共享

demo 雖小,但我們還是要完成一個完整的用例的最后一步,就是在整個團(tuán)隊(duì)中分享上面創(chuàng)建的容器化工作流。具體的做法大概有兩種:

  • 通過 dockerhub 等第三方平臺分享容器鏡像

  • 在公司內(nèi)搭建內(nèi)部使用的鏡像管理平臺

兩種方式都很方便,喜歡第二種方式的朋友可以參考筆者的博文《局域網(wǎng)內(nèi)部署 Docker Registry》。這里只簡單的介紹一下 dockerhub 的用法。首先你需要去 dockerhub 的官網(wǎng)注冊一個賬號,注冊后創(chuàng)建一個 repository,比如筆者的用戶名為 ljfpower,新創(chuàng)建的 repository 名稱為 azcli。然后需要在本地通過 docker login 命令進(jìn)行登錄。登錄后為本地的容器鏡像創(chuàng)建一個 tag,比如:

$ docker tag azcli ljfpower/azcli

最后一步便是把這個 tag 標(biāo)識的容器鏡像推送到 dockerhub 上去:

$ docker push ljfpower/azcli:latest

推送完成后你會在 dockerhub 上看到你的鏡像:

簡單起見筆者使用的是公有鏡像,也就是任何人都可以下載使用該鏡像。所以你只需要一條 pull 命令就可以享受別人分享的工作流了:

$ docker pull ljfpower/azcli

總結(jié)

我們打造了一個工具包,并把它容器化了。因此任何的團(tuán)隊(duì)成員都可以通過容器在自己的環(huán)境中無差別的運(yùn)行這些工作流。
這就是生產(chǎn)力呀!因?yàn)闆]人會再抱怨:"這個工具配置起來好惡心","為什么在我的機(jī)器上運(yùn)行不了 xxx" ...
同時,如果需要,你可以在任何環(huán)境中運(yùn)行這些工作流,比如構(gòu)建產(chǎn)品的服務(wù)器上,因?yàn)檫\(yùn)行這些工作流并不需要安裝額外的工具(python、azure cli 等)。
本文的名字起的很大而 demo 很小,權(quán)當(dāng)拋磚引玉了!

原文地址 :https://www.cnblogs.com/sparkdev/p/8744372.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的容器化的 DevOps 工作流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。