<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          DevOps?實戰(zhàn):Jenkins Docker

          共 4519字,需瀏覽 10分鐘

           ·

          2022-01-20 10:19

          原文鏈接:

          https://cloud.tencent.com/developer/article/1575521

          隨時 Docker 的普及,云原生時代已經(jīng)到來,開發(fā)工程師對應(yīng)用環(huán)境的掌控力進一步加強,運維成本進一步降低。DevOps 采用 Docker 更是如虎添翼,持續(xù)集成更快更靈活,部署更簡單。本課程主要講解 Docker 服務(wù)器架構(gòu)和技術(shù)要點,以及實戰(zhàn)使用 Jenkins 構(gòu)建 Docker。

          本次分享內(nèi)容:

          1、Docker 服務(wù)器架構(gòu)?
          2、Docker 下載和構(gòu)建加速?
          3、項目容器化的技術(shù)要點?
          4、DevOps 實戰(zhàn):Jenkins 構(gòu)建 Docker

          IaaS 是“基礎(chǔ)設(shè)施即服務(wù)”,采用服務(wù)器集群虛擬化技術(shù),面向運維人員,不用關(guān)心服務(wù)器怎么加內(nèi)存、壞了怎么辦,節(jié)約了硬件和網(wǎng)絡(luò)維護成本;

          PaaS 是“平臺即服務(wù)”,提供數(shù)據(jù)庫等軟件服務(wù),面向開發(fā)者編程調(diào)用,不需要自己搭建了,節(jié)約了運維成本,而運行環(huán)境能否標準化取代自建,是個問題;

          SaaS 是“軟件即服務(wù)”,提供企業(yè)郵箱、代碼托管等軟件服務(wù),面向辦公人士圖形化界面操作,不需要運維也不需要開發(fā)。

          如果租了臺云服務(wù)器,在上面安裝了數(shù)據(jù)庫,這叫做 IaaS + 自建,缺點是:自己負責(zé)數(shù)據(jù)庫備份,升級非常困難,運維成本很高,當(dāng)然比以前買服務(wù)器有進步。

          如果租了臺云服務(wù)器,再租了臺云數(shù)據(jù)庫,然后搭建開源郵箱和代碼庫,這叫做 IaaS + PaaS + 自建,缺點是:自己負責(zé)郵箱和代碼庫的升級,運維成本中等,而且開源產(chǎn)品的圖形界面往往比較難用,并且無人跟進及時升級導(dǎo)致安全隱患大、服務(wù)不穩(wěn)定,運維自己搭的郵箱夜里出故障了,客戶發(fā)的郵件丟了,沒有人知道,而專門做企業(yè)郵箱的公司承諾 SLA,有專人值守?,F(xiàn)在很少有公司自己搭郵箱了,是一大進步,但還是有不少公司自己搭代碼庫,浪費了很多人力物力,結(jié)果還難用降低了研發(fā)效率。

          做工程的最佳實踐是:不要重復(fù)造輪子,只要能買到就不要自己造自己搭,專注于產(chǎn)品業(yè)務(wù)。除非這個輪子是你的核心依賴,比如手機芯片,那屬于科研,而不是工程。所以首先需要明確本公司是業(yè)務(wù)驅(qū)動,還是科研驅(qū)動。關(guān)于工程師和科學(xué)家的區(qū)別,推薦閱讀硅谷創(chuàng)業(yè)之父寫的《黑客與畫家》

          PaaS 提供的云數(shù)據(jù)庫等標準化軟件服務(wù),非常方便,而標準化運行環(huán)境卻沒有流行起來,為什么?

          2010 年,dotCloud 成立做 PaaS 運行環(huán)境,結(jié)果發(fā)展不好,把其中的 Docker 開源,卻很受歡迎,大家可以閱讀這段有趣的歷史《Docker 傳奇之 dotCloud》。

          PaaS 讓開發(fā)者無需關(guān)心操作系統(tǒng),比如云數(shù)據(jù)庫后面是什么系統(tǒng),開發(fā)者不用管,最多改個配置重啟一下,很方便。而開發(fā)者用各種語言寫的應(yīng)用,都是定制化的,而不是標準化的,比如 Apache 配置不一樣,開啟的模塊不一樣,或者用的是 Nginx,所以開發(fā)者需要的是把 項目、語言環(huán)境 和 Apache 一起打包部署,甚至還有編譯安裝的組件,那就需要把整個系統(tǒng)打包。所以統(tǒng)一的應(yīng)用運行環(huán)境無法滿足,沒有流行起來。

          而 Docker 是一種輕量級虛擬機,解決了這個問題,非常方便。單機部署和運行 Docker 很簡單,而互聯(lián)網(wǎng)項目往往用戶量大,需要多臺服務(wù)器,如何部署集群并且自動伸縮,就需要集群管理工具。

          搭建一套完整的企業(yè)級 K8s 集群(最新二進制方式)

          Google 推出了 K8s,Docker 官方推出了 Swarm,經(jīng)過兩年的競爭,從 Google 搜索的關(guān)鍵詞熱度圖可以看出 K8s 已經(jīng)勝出,目前國內(nèi)的云計算大廠也紛紛支持 K8s。

          Docker 屬于操作系統(tǒng)層虛擬化,稱為“容器”,它在 Linux 系統(tǒng)里創(chuàng)建一個虛擬層,共用一個 Linux 內(nèi)核,既做到了隔離,速度又快于傳統(tǒng)的硬件抽象層虛擬機(比如 VirtualBox,可以在 Windows 系統(tǒng)里創(chuàng)建 Linux 虛擬機)。

          以前不管多么小的項目都要申請一臺新服務(wù)器,因為多個項目部署在一起會沖突,比如語言版本不同、共用一個 Apache 導(dǎo)致上線重啟時中斷別的項目。

          而 Docker 隔離了各個項目,一臺服務(wù)器可以跑很多個 Docker,大幅度降低服務(wù)器成本,初期只需要買 1 臺服務(wù)器,根據(jù)性能需求再增加。

          第一步:安裝 Docker,按照官方文檔,結(jié)果內(nèi)地非常慢,甚至安裝失敗。經(jīng)過分析安裝腳本的源碼,發(fā)現(xiàn)官方支持加速,但文檔里面沒有寫,很多人都不知道。

          可以看到 Docker 用的是 Cloudflare 國際 CDN,這家 CDN 是有中國節(jié)點的,但在中國辦網(wǎng)站需要備案,對于尚未在中國開展業(yè)務(wù)的公司,尤其是各種英語的技術(shù)服務(wù),都不會來備案,所以內(nèi)地開發(fā)者訪問很慢,甚至超時。

          這時候就需要有人提供國內(nèi)鏡像加速,這是個吃力不討好的事情,目前只有 163 一家提供免注冊的 Docker 公網(wǎng)加速,非常感謝。從圖中可以看到,拉取成功,速度挺快。

          項目容器化需要開發(fā)者寫一個 Dockerfile,基于各個語言的官方鏡像再安裝需要的庫和包,比如我們通過加速下載了 PHP 官方的 php:7.4-apache 鏡像,需要 apt 安裝一些庫,結(jié)果 docker build 的時候卡住了,這時候有個很好的調(diào)試方法:docker run 登錄進去,就是我們熟悉的 Linux 系統(tǒng)了,執(zhí)行 Dockerfile 里面的那些步驟,看看哪一步慢。看圖片右下角,可以發(fā)現(xiàn) apt update 很慢,才 10 KB/s。這時候就要想辦法加速 apt 了。

          apt 加速有大廠提供了,composer install 也有了,但沒人提供 get composer,所以我做了個開源項目提供加速服務(wù),大家課后可掃碼了解。

          項目容器化的技術(shù)要點有4個:

          • 國內(nèi)加速,掌握各種軟件源的國內(nèi)加速。

          • HTTPS,SSL證書不要放在Docker里,應(yīng)放在Docker里,應(yīng)放在云計算提供的負載均衡里。

            Docker只提供HTTP服務(wù)即可。

          • 云存儲,文件不要上傳到Docker里,重啟就丟了,應(yīng)上傳到云存儲。

          • Log采集,Log不要記錄在Docker里的文件中,而應(yīng)該輸出到STDOUT和STDERR,再使用Log采集工具。

          有一個 Laravel 項目在本地運行,Apache 也配好了,如何對它進行 Docker 化?

          第一步:搜索框架官方的 Docker 鏡像,如果沒有,再尋找語言官方鏡像。比如 Laravel 沒有官方鏡像,那就用 PHP 鏡像,安裝一些組件即可。

          把本地項目的依賴包刪除,然后掛載到 Docker 里,進行依賴安裝,逐個解決報錯,比如圖中 composer install 報錯缺少 zip,那就需要通過 apt 安裝。

          apt 安裝需要使用國內(nèi)加速,請看最上面一行代碼。apt 安裝完畢,再進行項目包安裝,最后把所有的依賴都裝好,項目終于跑了起來。

          Docker 始終在前臺運行,鏡像無狀態(tài),重啟就會丟失所有文件,所以 log 應(yīng)該通過標準輸出,而不應(yīng)該保存為文件。可以看到 Apache 已經(jīng)把 log 文件指向了標準輸出。

          項目中會記錄業(yè)務(wù) log,也需要改造為標準輸出。左邊是項目的 log 配置,右邊是業(yè)務(wù)代碼打 log,下面是最終運行效果。

          最后中國版的 Dockerfile 是這樣的,黃色的部分用來國內(nèi)加速,其余部分是國際通用的。

          以前持續(xù)集成依賴廠商提供的語言環(huán)境,不支持某些語言或者版本過時經(jīng)常發(fā)生,而到了 Docker 時代,持續(xù)集成環(huán)境根據(jù)開發(fā)者的 Dockerfile 進行搭建,可以支持任何環(huán)境,開發(fā)者的掌控力進一步加強,廠商也無需投入資金去支持各種語言了,達到了雙贏。

          部署 Docker 鏡像的成本也很低,尤其是 K8s 彈性集群,不需要購買服務(wù)器,根據(jù)性能自動伸縮,很多網(wǎng)站夜間訪問量很低,可降低到一兩臺,比包年包月的服務(wù)器便宜。

          可以看出需要3個服務(wù):持續(xù)集成、私有 Docker 倉庫、K8s 集群管理。如果自己搭建,維護成本很高,不符合云計算的理念,采用 PaaS 最合適。

          第一步,尋找 Jenkins 云服務(wù)和制品倉庫,比如 coding.net

          這個項目的代碼很簡單,就是一個 Laravel demo,大家可以提交自己熟悉的語言 demo,然后創(chuàng)建制品庫。

          創(chuàng)建了 Docker 制品庫,就會獲得一個倉庫鏈接,用來推送和拉取鏡像。


          然后配置一下 Jenkins,建議調(diào)試階段使用在線靜態(tài) Jenkinsfile,調(diào)試通過以后,再保存到代碼庫里。


          CODING Jenkins 圖形化編輯器

          Jenkins 構(gòu)建 Docker 很簡單,和本地一樣,只是要掌握一些 Jenkins 語法。需要注意的是:要判斷分支,比如只構(gòu)建 master。

          構(gòu)建成功后,可以在制品庫中看到鏡像。下一步就是把它部署到 K8s 集群里。

          找一家云計算廠商,如騰訊云,創(chuàng)建 K8s 集群,會獲得一個 KubeConfig,放在本地即可使用 kubectl 命令遠程操作。

          不過 K8s 來自 Google,官網(wǎng)在國外,內(nèi)地?zé)o法下載,所以需要國內(nèi)加速。對 kubectl 命令不熟悉的話,也可以使用云計算網(wǎng)頁后臺創(chuàng)建網(wǎng)站,比如圖中用 apache 官方鏡像創(chuàng)建了一個網(wǎng)站。

          把 K8s 密鑰錄入 CODING,授權(quán)給持續(xù)集成。

          看圖中高亮的代碼,先在 K8s 中創(chuàng)建一個密鑰用來保存私有 Docker 倉庫的地址、用戶名、密碼,然后部署時指定私有鏡像和密鑰即可。

          Jenkins 運行成功,在本地使用 kubectl get pods 命令可以看到正在創(chuàng)建一個新容器,老的容器繼續(xù)運行。

          還可以通過 kubectl edit deploy web 命令查看目前的配置。

          從第一張圖可以看到 K8s 配置里有了私有鏡像和倉庫密鑰。

          第二張圖可以看到新容器創(chuàng)建成功以后,老的容器才會被刪除,不像傳統(tǒng)上線那樣導(dǎo)致服務(wù)中斷。

          第三張圖是部署成功的項目首頁。

          涉及源碼:

          https://codes-farm.coding.net/p/laravel-demo/d/laravel-demo/git


          - END -

          ?推薦閱讀?





          阿里巴巴 DevOps 轉(zhuǎn)型后的運維平臺建設(shè)
          線上 K8s Ingress 訪問故障排查思路
          Kubernetes 生態(tài)架構(gòu)圖
          20張最全的DevOps架構(gòu)師技術(shù)棧圖譜
          Linux Shell 腳本編程最佳實踐
          我的云服務(wù)器被植入挖礦木馬,CPU飆升200%
          做了這么多年運維工作,現(xiàn)在才看清職業(yè)方向
          一篇文章講清楚云原生圖景及發(fā)展路線
          K8s kubectl 常用命令總結(jié)(建議收藏)
          一名運維小哥對運維規(guī)則的10個總結(jié)
          K8s運維錦囊,19個常見故障解決方法
          編寫 Dockerfile 最佳實踐
          搭建一套完整的企業(yè)級 K8s 集群(kubeadm方式)



          點亮,服務(wù)器三年不宕機

          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品美女视频免费线播放 | 抽插视频免费 | 成人AV电影天堂 | 黄片免费观看视频 | 日韩色情在线播放 |