你好,我是 legendtkl,目前就職于某 BAT 大廠,任職技術(shù)專家,具有豐富的后端開發(fā)經(jīng)驗,包括 Docker、Kubernetes、Web 開發(fā)和大數(shù)據(jù)等。
首先感謝大家來學習這門專欄,在本專欄中,我將會為大家深入淺出地剖析 Docker 技術(shù)及其最佳實踐并分享我在使用 Docker 的時候所踩的一些坑。
眾所周知,Docker 是使用 Go 語言編寫的,我從畢業(yè)之初就開始關(guān)注和使用 Go 語言,那時候 Go 語言的明星項目還比較少,Docker 算是其中一個比較耀眼的項目。
于是,我抱著學習的態(tài)度,把 Docker 的源代碼擼了一遍,也算是把 Docker 技術(shù)入了門。再到后來我注意到 Kubernetes 日益火熱起來,于是我又開始投入精力學習 Kubernetes。
這樣的學習一直持續(xù)到了 2016 年,彼時,Docker 作為云計算的基礎設施逐漸進入大眾視野,隨后被譽為云上操作系統(tǒng)的 Kubernetes 也開始逐漸嶄露頭角。
作為國內(nèi)云計算市場的領頭羊,我所在的部門也開始大量引入 Docker 和 Kubernetes 技術(shù)棧,由于我之前一直在儲備這方面的技術(shù)知識,正好匹配部門當前的需求,于是開始在部門內(nèi)脫穎而出。同時也印證了那句:“機會從來都是留給有準備的人”。
另外我在部門容器化轉(zhuǎn)型過程中通過不斷的學習和總結(jié)積累了非常寶貴的一手經(jīng)驗,希望可以通過本專欄介紹給大家。
1. 為什么要學習 Docker
Docker 已經(jīng)變成基礎設施
目前的技術(shù)水平已經(jīng)真正的進入了云計算時代,各大基礎設施紛紛上云。阿里已經(jīng)在去年雙十一將所有業(yè)務都遷移到了云上。而云的基礎設施就是 Docker,準確的說是容器,而 Docker 正是當下最主流的容器技術(shù)。
之所以說 Docker 是基礎設施,是因為 Docker 的資源限制和隔離性是云上必不可少的特性。相比于之前每個部門的應用申請一堆物理機來部署自己的應用進程,使用云計算的方式來統(tǒng)一管理公司所有的應用使得資源的使用率更加的高。
那么這么多的應用部署到一起就需要解決三個主要問題:應用隔離、應用部署和資源限制。
應用隔離
很容易理解,比如不同的應用依賴了沖突的基礎軟件包,如果都直接部署在操作系統(tǒng)環(huán)境下,必然會引起沖突。這個時候就需要應用之間互相隔離。Docker 使用操作系統(tǒng)底層的 Namespace 技術(shù)來做隔離是一種主流的技術(shù)方案。
應用部署
在容器技術(shù)誕生之前,所有的應用都是直接部署在操作系統(tǒng)上面的,彼此之間共享底層的操作系統(tǒng)資源,比如內(nèi)存、CPU、磁盤等。
打個比方,如果我們要將應用 A 和應用 B 部署到同一臺機器上,那么這兩個應用需要的環(huán)境信息,我們都需要滿足。如果應用 A 和 B 的環(huán)境依賴之間存在沖突,或者說不兼容,那么管理起來就會非常的困難。
而這個問題,我們通過容器的鏡像技術(shù)卻可以非常簡單地解決掉。除此之后,Docker 技術(shù)還有很多相比于傳統(tǒng)技術(shù)更加優(yōu)勢的地方,這也 Docker 技術(shù)能夠迅猛發(fā)展起來的根本原因。
資源限制
不同的應用共享集群不可避免的涉及到資源使用限制的問題。比如一個公司同時有多個業(yè)務部門使用一個統(tǒng)一的集群,在統(tǒng)計研發(fā)成本時,需要統(tǒng)計各個部門的資源使用情況然后做劃分。這樣我們就可以根據(jù)資源使用限制來劃分,當某些應用資源使用超限就殺掉應用。Docker 使用內(nèi)核提供的 Cgroup 技術(shù)來做資源限制正好可以應用到這個場景。
Docker 技術(shù)學習方法
這幾年為團隊面試過很多同學,發(fā)現(xiàn)很多候選人對于 Docker 的技術(shù)理解都浮于表面,知道 Docker 如何使用,但是一旦涉及到底層技術(shù)原理就不清楚了。
有一些同學可能會有疑問,工作中更多的還是使用,真的有必要了解底層原理嗎?日常使用可能沒有問題,但是一旦出現(xiàn)疑難雜癥,如果不了解 Docker 的底層知識,Docker 對于我們就是一個黑盒,對于排查問題是很不利的。
造成上面這種現(xiàn)象的主要原因是大部分的候選人都沒有系統(tǒng)地進行學習,而是在日常工作中遇到技術(shù)問題去專項解決,或者網(wǎng)上搜索一些各種博主的文章。而網(wǎng)上的文章大部分都是轉(zhuǎn)載來轉(zhuǎn)載去,有一些知識點還是錯的,我之前有一篇文章就被反復轉(zhuǎn)載,而里面一個知識點是老版本中的實現(xiàn),新版本中的實現(xiàn)早就變了。
而這篇專欄正是要解決上面這個問題的,為大家提供一個系統(tǒng)地,全面地學習教程。
2. Kuberneters
前面介紹了 Docker 技術(shù)的一些理論知識和最佳實踐,但是正如前面所說,Docker 技術(shù)從來都不是一個孤立的技術(shù)。Docker 更多的還是作為一種技術(shù)基石,基于 Docker 我們還需要做一些包括容器編排管理等工作。
說到容器編排和集群管理系統(tǒng),從早期的 docker-compose 到 swarm,可以說是諸侯林立。但是自從 Kubernetes 出現(xiàn)后慢慢的出現(xiàn)了大一統(tǒng)的趨勢,憑借著 Google 內(nèi)部早期積累的經(jīng)驗和優(yōu)秀的云原生設計理念,Kubernetes 可以說是一騎絕塵,目前已經(jīng)全面占領了云端統(tǒng)一管理的地位。
而在本專欄中,我也給大家設計了“Kubernetes 的核心技術(shù)精講和最佳實踐”環(huán)節(jié),幫助大家快速掌握 Kubernetes 這一獨領風騷的容器編排和集群管理系統(tǒng)。
3. 你可以收獲什么
通過本課程你可以學習到 Docker 和 Kubernetes 的基礎知識和核心原理以及最佳實踐。
最重要的是授人以漁。本專欄的文章組織形式都是一種學習思路的再現(xiàn),比如提出問題,嘗試解決問題,理解問題背后的原理。
我覺得這也是一種比較好的學習方式,問題驅(qū)動式的學習方式能夠幫助我們不僅知其然、而且知其所以然。更重要的是通過這種方式習得的知識要比填鴨式的照本宣科顯得更加的牢靠。
4. 課程組織
為了能讓你更快的掌握 Docker 和 Kubernetes 的基礎知識和核心原理,同時也照顧一下那些沒有基礎的同學,我將專欄內(nèi)容作了如下安排“
本專欄圍繞 Docker 和 Kuberneters 核心技術(shù)展開,共劃分為 5 部分 47 個小節(jié)。
第一章: Docker 基礎
本部分內(nèi)容會介紹 Docker 的一些背景和基礎知識,簡單概括,包括如下部分:
- Docker 容器的發(fā)展之路。介紹 Docker 技術(shù)如何從一個不起眼的技術(shù)逐步發(fā)展壯大并最終引領了一場 PaaS 革命的;
- Docker 安裝與運行。介紹 Docker 的基本操作,包括不同平臺的安裝和運行;
- Docker 技術(shù)概覽。這篇文章會介紹 Docker 的基本使用情況,讓大家對 Docker 技術(shù)有一個總體的概覽;
- Docker 鏡像技術(shù)。介紹 Docker 的鏡像技術(shù)。Docker 的鏡像技術(shù)是 Docker 技術(shù)中非常重要的一環(huán),Docker 正是靠著鏡像技術(shù)改變了當年如火如荼的 PaaS 格局;
- 其他:包括 Docker 常用的鏡像等;
- 動手實踐:在這個環(huán)節(jié),我們將動手實踐構(gòu)建出第一個屬于我們自己的 Docker 應用。有句話說的好,“紙上得來終覺淺,絕知此事要躬行”。只有真正動手實踐才能更加深刻的理解內(nèi)部原理。
第二章: Docker 核心技術(shù)
在第一部分,我們主要介紹一些 Docker 的基礎技術(shù),在這個部分我們將帶領大家更加深入地理解 Docker 的核心技術(shù)。包括如下部分:
- Docker 隔離技術(shù)的本質(zhì) Namespace 深入解析:從內(nèi)核層面介紹 Docker 的隔離的本質(zhì) Namespace 技術(shù);
- Docker 資源限制技術(shù)的幕后主使 Cgroup 剖析:從操作系統(tǒng)角度介紹 Cgroup 技術(shù);
- Docker 鏡像深入理解,主要介紹 Docker 鏡像的組織形式,包括聯(lián)合文件系統(tǒng)掛載等。
- Docker 的本質(zhì),Docker 的本質(zhì)其實就是進程;
- Docker 鏡像構(gòu)建,介紹 Dockerfile 的使用;
- Docker 網(wǎng)絡相關(guān):介紹 Docker 的網(wǎng)絡的基本原理和幾種模式,以及 Docker 中 link 的實現(xiàn)原理;
- Docker 數(shù)據(jù)存儲相關(guān):主要包括 Docker 的數(shù)據(jù)卷和數(shù)據(jù)共享相關(guān)。
第三章: Docker 最佳實踐
前面兩部分介紹完了理論部分,第三章主要介紹 Docker 最佳實踐:
- Dockerfile 最佳編程實踐:詳細介紹 Dockerfile 編寫中的各種指令的使用場景和最佳實踐;
- 如何構(gòu)建最小鏡像最佳實踐:鏡像構(gòu)建作為應用打包部署中非常關(guān)鍵的一環(huán),這篇文章將介紹如何使得構(gòu)建出來的鏡像盡量的??;
- 其他 Docker 使用中的最佳實踐,比如如何使用 tag 等;
- 我們?nèi)萜骰臅r候為什么要保持 Docker 是個單進程模型:相信大家都聽過這句話 “Docker 是個單進程模型”,那么為什么這么說呢?本篇文章將從操作系統(tǒng)層面進行分析;
- 容器設計模式:介紹當前基于容器構(gòu)建分布式應用程序幾種典型的設計模式;
- Docker 監(jiān)控方案最佳實踐:這篇文章將介紹 Docker 的監(jiān)控最佳實踐;
- 從 0 到 1 構(gòu)建一個分布式高可用的 Web 應用。
第四章: 云原生容器技術(shù)Kubernetes
前面介紹了 Docker 技術(shù)的一些理論知識和最佳實踐,但是正如前面所說,Docker 技術(shù)從來都不是一個孤立的技術(shù)。Docker 更多的還是作為一種技術(shù)基石,基于 Docker 我們還需要做一些包括容器編排管理等工作。
說到容器編排和集群管理系統(tǒng),從早期的 docker-compose 到 swarm,再到最近兩年的 Kubernetes,終于出現(xiàn)了大一統(tǒng)的趨勢,也就是 Kubernetes。Kubernetes 憑借著 Google 內(nèi)部早期積累的經(jīng)驗和優(yōu)秀的云原生設計理念,一騎絕塵。在 2018 年全面推廣開來,目前已經(jīng)全面占領了云端統(tǒng)一管理的地位。我們這一章就是要介紹 Kubernetes 相關(guān)的技術(shù)知識,包括:
- 云原生和 Kubernetes 簡介;
- Kubernetes 集群資源隔離介紹:Namespace;
- Kubernetes 核心設計 Pod 的解析;
- 配置管理 ConfigMap 和 Secret;
- 容器化守護進程 DaemonSet;
- Kubernetes 的控制器模式介紹;
- Kubernetes 的典型控制器 ReplicaSet、ReplicaController 和 Deployment 介紹;
- 批處理:Job 和 CronJob 介紹;
- 實踐部分:通過 Kubernetes 來構(gòu)建我們的容器化應用。
第五章: 云原生監(jiān)控方案
目前 Prometheus 已經(jīng)成為云原生監(jiān)控方案的事實標準,最后一章我們將介紹 Prometheus 的一些知識,包括:
- Prometheus 簡介:包括定位等;
- Prometheus 架構(gòu)解析;
- 通過 Prometheus 監(jiān)控容器。
最后,大家在學習過程中有任何問題都可以在專欄的評論區(qū)進行留言,我會統(tǒng)一進行回復。