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

          一文掌握 Docker 技術(shù)體系

          共 5970字,需瀏覽 12分鐘

           ·

          2022-05-19 16:10

          大家好,我是杰哥。

          提起 Docker,很多軟件工程師都會認為那是運維工程師需要掌握的技能。殊不知互聯(lián)網(wǎng)日益內(nèi)卷,極限環(huán)境下如何脫穎而出——成為佼佼者,這才是值得思考的問題。因此,我們不要局限在特定領(lǐng)域的“一畝三分地”,掌握“應(yīng)用全生命周期”的各個環(huán)節(jié),才是萬全之策。當“領(lǐng)域深耕+邊界擴寬”逐漸成為一種趨勢,T 型人才將會立于不敗之地,這就是所謂的底層邏輯。

          而 Docker 技術(shù)就是這樣一種神奇的存在:懂,萬物皆可容器化;不懂,則重復(fù)“搬磚”,繁忙而不自知。
          因此,作為軟件工程師,不妨提高自身壁壘,儲備一些 Docker 技術(shù)知識體系以備不時之需。
          值得關(guān)注的是,Docker 一詞的“谷歌趨勢”穩(wěn)定在 75 分以上(熱度最高的字詞得 100 分),可以看出來近一年 Docker 技術(shù)的熱度“有增無減”。
          本文將圍繞以下三點展開:
          1.Docker 能做什么?
          2.Docker 技術(shù)體系
          ? Docker 架構(gòu)
          ? Docker 周邊生態(tài)
          ? 理論實踐相結(jié)合
          3.如何快速掌握
          ? Docker 學(xué)習(xí)體系
          ? 書籍推薦
          ? 其他
          言歸正傳,開篇我們先來講一講 Docker 技術(shù)體系,“擴寬邊界”從場景出發(fā)。
          01
          Docker 能做什么

          開始之前,先來盤一下日常的開發(fā)中什么情況會接觸到 Docker 技術(shù)。

          ?

          (1)固化配置,提高效率

          Docker 提供了一個通用配置文件。在初次配置成功后,研發(fā)人員可以將配置文件固化,之后碰到相同的配置需求,直接復(fù)制即可使用。
          隨著應(yīng)用逐漸增多,研發(fā)人員只需維護好與之對應(yīng)的 Docker 配置文件即可,而這個配置文件則存儲了Docker 運行、啟動、部署的命令。

          (2)自動化CI/CD流程

          Docker 提供了一組應(yīng)用打包構(gòu)建、傳輸及部署的方法,以便于用戶能夠輕而易舉地在容器內(nèi)運行任何應(yīng)用。Docker 還提供了跨越這些異構(gòu)環(huán)境以滿足一致性的微環(huán)境——從開發(fā)到部署、再到流暢發(fā)布。
          以上這些只是Docker的基本能力,除此之外,它最強大的地方是:可以和Jenkins、GitLab 等串聯(lián)起來,融入項目開發(fā)的CI/CD(持續(xù)集成與持續(xù)發(fā)布)流程中,讓一鍵部署成為可能。

          (3)DevOps節(jié)點運行能力

          在傳統(tǒng)軟件開發(fā)過程中,開發(fā)和運維是兩個極其割裂的環(huán)節(jié)。對于互聯(lián)網(wǎng)公司而言,其業(yè)務(wù)高速發(fā)展,需要通過“小步快跑”的方式進行敏捷開發(fā),以此來滿足用戶差異化的需求、應(yīng)對競爭對手的產(chǎn)品策略。因此,在極端情況下,如:每周發(fā)布多次甚至每天發(fā)布多次的場景,高效的團隊協(xié)作就顯得尤為重要。
          DevOps 在這種場景下應(yīng)運而生,它打破了開發(fā)人員和運維人員之間的壁壘,通過“節(jié)點服務(wù)”組成工作流,串聯(lián)項目完整生命周期,涵蓋了研發(fā)、構(gòu)建、測試、發(fā)布、監(jiān)控及反饋等流程,從而促進了軟件的一致性和標準化。
          標準的“節(jié)點服務(wù)”依賴一些隔離的執(zhí)行環(huán)境:既要快速啟停、又要服務(wù)穩(wěn)定執(zhí)行、還要支持高并發(fā)調(diào)度,這一切都可以通過 Docker 來輕松實現(xiàn)。

          (4)自動化測試

          測試人員每天都需要完成大量的測試任務(wù),手動執(zhí)行測試會耗費大量的時間,這時可以考慮使用 Docker 進行自動化改造。自動化的成本是首次自動化程序的編寫和維護,而收益則是解放人力、提高生產(chǎn)力。
          測試人員在進行一些功能測試、性能測試以及UI測試時,需要快速搭建不同的運行環(huán)境、掌握Docker技術(shù),可以讓測試人員如虎添翼。

          (5)應(yīng)用隔離

          讀者或許會疑惑,為什么需要應(yīng)用隔離?例如,服務(wù)器上混部了兩個服務(wù):
          • Node服務(wù),用來啟動Web服務(wù);

          • Java服務(wù),用來提供前后端分離的API接口。

          可能出現(xiàn)這種情況——兩個服務(wù)爭奪服務(wù)器的CPU資源,無論哪一方失敗都將造成災(zāi)難。如下圖所示,服務(wù)器的CPU資源已經(jīng)被Java服務(wù)占滿。
          在資源有限的前提下,同一時間無法同時滿足多個進程的過度使用。當然,在這種場景下可以通過獨立部署、為虛擬機設(shè)定資源優(yōu)先級等方案解決。
          但在 Docker中,這些完全沒有必要擔(dān)心,因為Docker提供了進程級的隔離,可以更加精細地設(shè)置CPU和內(nèi)存的使用率,進而更好地利用服務(wù)器的資源。

          (6)動態(tài)擴容/縮容

          在企業(yè)中,如果存在大促或流量不均的場景,則服務(wù)器的自動擴容/縮容就會很關(guān)鍵。
          • 在流量低谷時進行自動縮容,可以大幅度減少服務(wù)器成本。

          • 在峰值來臨時,通過服務(wù)器性能嗅探,可以預(yù)測到瓶頸即將來臨,自動觸發(fā)服務(wù)器擴容操作,從而保證服務(wù)器穩(wěn)定運行。

          這一切在傳統(tǒng)的虛擬機中顯得十分笨重,而在Docker中卻非常靈活并且高效,因為,每個容器都可作為單獨的進程運行,并且可以共享底層操作系統(tǒng)的系統(tǒng)資源。這樣可以提高容器的啟動和停止效率,擴容也就毫不費力了。

          (7)節(jié)省成本,一體化管理

          節(jié)省成本也是很多企業(yè)使用Docker的原因之一。傳統(tǒng)企業(yè)一般會使用虛擬機,虛擬機雖然可以隔離出很多“子系統(tǒng)”,但占用的空間更大,啟動更慢。
          Docker技術(shù)不需要虛擬出整個操作系統(tǒng),只需要虛擬出一個小規(guī)模的環(huán)境,與“沙箱”類似。
          此外,虛擬機一般要占用很大的存儲空間(可以達到數(shù)十GB);而容器只需要占用很小的存儲空間(最小的僅為幾KB),這樣就能節(jié)省出更多的服務(wù)器資源,從根本上節(jié)省成本。
          可以看出,Docker已經(jīng)滲透到了日常開發(fā)的方方面面。那么究竟Docker的技術(shù)體系有多大,不妨一起來探究下。
          02
          Docker技術(shù)體系
          (1)Docker架構(gòu)
          我們先從Docker技術(shù)體系展開,如下圖:
          簡單說明下,架構(gòu)主要包含這些部分:
          • Docker Client:開發(fā)者可以在命令行中使用Docker相關(guān)執(zhí)行與Docker守護進程進行交互,從而管理諸如Image(鏡像)、Container(容器)、Network(網(wǎng)絡(luò))和Data Volumes(數(shù)據(jù)卷)等實體。?

          • Docker Server:

            ? Daemon:通過 Libcontainer、LXC 等容器管理工具來接收 Client 端的指令完成容器管理操作;

            ? Containerd:Docker 引擎中的 Containerd 組件確保了 Docker 鏡像能夠以正確的 OCI Bundle 的格式傳遞給 Runc;

            ? Runc:實質(zhì)上是一個輕量級的、針對 Libcontainer 進行了包裝的命令行交互工具,可以理解為一個獨立的容器運行時工具。作用只有一個——創(chuàng)建容器。

          • Docker Driver:

            ?Execdrive:存儲了容器定義的配置信息了,Libcontainer 拿到這些配置信息后,將會調(diào)用底層的 Namespace 和 Cgroup 等技術(shù)來完成容器的創(chuàng)建和管理;

            ? Networkdirver:主要作用是完成 Docker 容器的網(wǎng)絡(luò)環(huán)境配置,包括容器的 IP 地址、端口、防火墻策略,以及與主機的端口映射等;

            ? Graphdriver:主要負責(zé)對容器鏡像的管理。

          • Linux Kernel:

            ? Chroot:即 change root directory (主要用來更改 root 目錄)。在 Linux 系統(tǒng)中,系統(tǒng)默認的目錄結(jié)構(gòu)都是以 /,即以根 (root) 開始的。而在使用 Chroot 之后,系統(tǒng)的目錄結(jié)構(gòu)將以指定的位置作為 / 位置;

            ? Namespace:是 Linux 內(nèi)核用來隔離內(nèi)核資源的方式,目的就是實現(xiàn)輕量級虛擬化(容器)服務(wù),為 Docker 等容器技術(shù)提供了基礎(chǔ)條件;

            ? Cgroup:是 Linux 內(nèi)核提供的一種可以限制單個進程或者多個進程所使用資源的機制,可以對 CPU、內(nèi)存等資源實現(xiàn)精細化的控制,Docker 就使用了 Cgroup提供的資源限制能力來完成 CPU,內(nèi)存等部分的資源控制;

            ? Network:為 Docker 容器提供多種網(wǎng)絡(luò)解決方案;

            ? Capability:Linux 引入了 Capabilities 機制對 root 權(quán)限進行細粒度的控制,實現(xiàn)按需授權(quán),從而減小系統(tǒng)的安全攻擊面;?

            ? Seccomp:即安全計算模式,可以使用它來限制容器內(nèi)可用的操作。seccomp()系統(tǒng)調(diào)用在調(diào)用進程的seccomp狀態(tài)下運行。Docker 中使用此功能來限制應(yīng)用程序的訪問;

            ? Filesystem:UnionFS 通過 Linux Filesystem 為容器提供高效的管理能力。Docker 的鏡像就采用了 UnionFS 技術(shù),從而實現(xiàn)了分層的鏡像。

          (2)Docker 周邊生態(tài)

          如果需要搭建“企業(yè)級容器化標準”,那么一定要對 Docker 周邊生態(tài)有足夠的了解,不妨一起從下圖中感受整個技術(shù)體系。
          從生態(tài)圖中我們看到,Docker涉及到很多工具或平臺。
          但萬變不離其宗,“企業(yè)容器化標準”可以歸納以下幾方面:
          • 服務(wù)發(fā)現(xiàn):Etcd、ZooKeeper、Consul、Eureka

          • 負載均衡:Nginx、F5、LVS

          • 網(wǎng)絡(luò)選型:Flannel、Calico、Weave、自研

          • 存儲系統(tǒng):PV/PVC聲明文件、StorageClass動態(tài)供給

          • 部署發(fā)布:Jenkins、GitLab、Registry

          • 服務(wù)監(jiān)控:Zabbix、Nagios、cAdvisor、Prometheus

          • 日志管理:兩種模式Daemonset集中式、Sidecar自定義,ELK

          • 鏈路追蹤:Pinpoint、Jaeger 、SkyWalking、Zipkin

          • 容器編排:Swarm、Kubernetes、Mesos

          • 數(shù)據(jù)存儲:Redis、MySQL、MongoDB

          • 彈性部署:手動擴容、自動擴容、定時擴容

          • 集群可靠性:集群預(yù)留、資源預(yù)留、集群組件(API Server、Etcd集群方案、kube-scheduler與controller-manager)

          (3)理論實踐相結(jié)合

          基于上述理論,我們來看一個實際場景:
          對上述流程圖簡單解釋一下:
          • 通過 Docker 對代碼進行容器化處理;

          • 通過 Gitlab 托管代碼;

          • Jenkins 監(jiān)聽 Gitlab 下的代碼,觸發(fā)自動構(gòu)建,并執(zhí)行 Kustomize 文件;

          • Kustomize 通過配置文件,設(shè)置了 Istio 的配置(染色識別、流量分發(fā)),并啟動 K8s 部署應(yīng)用;

          • 最終我們通過 Rancher 來對多容器進行界面化管理;

          • 打開瀏覽器進行訪問。?

          架構(gòu)圖如下:
          看到這里,相信讀者也猜到了,我們實現(xiàn)了一個“多容器化部署”的案例。它有什么意義呢?
          • 首先,當然是環(huán)境隔離了,研發(fā)每人一個容器開發(fā),互不干擾;

          • 其次,我們可以做很多小流量、灰度發(fā)布等事情;

          • 最后,低成本隔離,自動化部署,一站式的流程體驗;

          Docker 技術(shù)體系相當龐大,這也就導(dǎo)致了很多新人望而生畏。因此,我整理了一套Docker學(xué)習(xí)體系,為讀者快速掌握提供幫助。
          03
          如何快速掌握

          (1)Docker 學(xué)習(xí)體系

          市場上不乏 Docker 技術(shù)相關(guān)的書籍,或圍繞官方基礎(chǔ)文檔缺乏新意,或直入源碼讓新人望而卻步。鮮有既滿足讀者入門需要,又結(jié)合企業(yè)實際案例的佳作。
          《Docker實戰(zhàn)派:容器入門七步法》正是看到了這一點,另辟蹊徑,從讀者角度出發(fā),首次提出了“七步法”的概念。?
          何謂“七步法”?七是人們最容易記住的數(shù)字,也是人類瞬間記憶的極限,本書正是立意于此。
          • 第一步,從具象的故事開始,開門見山、降低認知門檻。

          • 第二步,通過“第一個Docker 項目”,幫助讀者快速上手。在讀者建立起體系概念后;

          • 第三步,直切核心原理,圍繞Docker 架構(gòu)展開,由淺入深的講解了Docker 底層隔離機制、容器生命周期、網(wǎng)絡(luò)與通訊、存儲原理以及源碼。深入剖析,知其然而知其所以然。

          • 第四步,趁熱打鐵,圍繞前后端項目,從全棧角度進行項目實戰(zhàn)。

          • 第五步,從Docker容器運維角度出發(fā),進一步補充讀者知識圖譜,這也是初學(xué)者最容易忽視的內(nèi)容。

          • 第六步,步入高級教程,該部分重點圍繞Docker 技術(shù)最佳實踐展開,提供了容器與進程、文件存儲與備份、網(wǎng)絡(luò)配置、鏡像優(yōu)化以及安全策略等內(nèi)容,示例豐富,操作性十足。

          • 第七步,全書內(nèi)容升華。通過云原生持續(xù)交付模型、企業(yè)容器標準化及兩個實際的企業(yè)級方案,將本書所有內(nèi)容進行串聯(lián)。??

          至此,七步完成。讀者可以清晰的感受每一步帶來的技術(shù)提升,穩(wěn)扎穩(wěn)打,從而完全將 Docker 技術(shù)融會貫通。
          本書特色


          《Docker實戰(zhàn)派——容器入門七步法》最大的亮點如下。
          (1) 趣味易懂。
          書中較多的原理,剝除了Docker 官方文檔晦澀難懂的外衣,通過趣味的故事展開。如:
          • 通過“蓋房子”的比方來理解Docker 是什么;

          • 通過“別墅與膠囊旅館”的例子來闡述容器與虛擬機的概念;

          • 通過“工廠和車間”來說明進程和線程等。

          讀者無須記憶就可輕松理解,這也正是本書想要傳達的觀點:并非技術(shù)晦澀難懂,而是缺乏技巧。
          (2) 案例豐富。
          本書第2、4、5、6、7章都包含大量的示例。不管是“第一個 Docker 項目”還是項目實戰(zhàn),或者是“企業(yè)案例”都包含了大量的代碼講解。
          讀者完全可以按照教程逐步實現(xiàn),體驗Docker 編程的樂趣。
          (3) 實操性強。
          值得一提的是,本書中案例均來自于實際的研發(fā)過程,為了讓讀者能夠輕松掌握,去除了容器中包含的業(yè)務(wù)邏輯,保留了Docker 容器最核心的架構(gòu),實操性強。
          熟練掌握書中的精彩案例,沉淀其所表現(xiàn)出來的方法論,相信讀者一定能夠在企業(yè)應(yīng)用中靈活運用,事半功倍。

          作者簡介

          王嘉濤(Jartto),高級技術(shù)專家,技術(shù)博客作者。擅長 Web 領(lǐng)域,對性能優(yōu)化、工程化、以及容器化略有心得。現(xiàn)就職于美團,負責(zé)前端公共技術(shù)建設(shè)。
          李傳龍(Alonso),Kubernetes 運維專家。在運維領(lǐng)域積累了豐富的實戰(zhàn)經(jīng)驗,尤其是服務(wù)容器化、PaaS化、穩(wěn)定性建設(shè)、運維體系建設(shè)等方面探索深入。現(xiàn)就職于百度,負責(zé)云相關(guān)運維。
          盧桂周(Storm),前端技術(shù)專家。在前端技術(shù)升級、UI自動化測試、CI/CD、前端工程化、服務(wù)容器化有豐富的實戰(zhàn)經(jīng)驗。現(xiàn)就職于拉勾,負責(zé)前端團隊。
          Docker 容器化并不是一個單點的技術(shù),反而涉及工程化以及運維體系的方方面面。因此,特邀請李傳龍、盧桂周兩位行業(yè)大佬通力合作,讓本書在該領(lǐng)域更具專業(yè)性。而做這一切的目的,就是為讀者提供舒適的閱讀體驗和清晰明了的入門之旅。?
          也許你暫時不會接觸 Docker 容器化技術(shù),但《Docker實戰(zhàn)派:容器入門七步法》卻值得擁有。因為它能為你指明方向:技術(shù)入門,七步可成!

          掃碼查看本書詳情!

          贈書規(guī)則:為本文「點贊在看」+ 「轉(zhuǎn)發(fā)朋友圈」 +「留言」且與文章內(nèi)容相關(guān)的優(yōu)質(zhì)留言即可上墻并從所有留言中隨機選出3位走心留言的讀者將各獲得一本。

          截止時間:2022年5月21日,晚 21:00

          領(lǐng)書須知:提供點贊在看和轉(zhuǎn)發(fā)朋友圈截圖

          注意事項:最終獲贈者請在24小時以內(nèi)添加我的微信,備注:贈書??

          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  特级西西444www精品视频 | 日韩一区二区三区四区五区六区 | 少妇国产jp | 欧美日韩中文在线视频 | 在线免费观看黄色视频网站 |