容器化時代來了
虛擬化技術已經走過了三個時代,沒有容器化技術的演進就不會有 Docker 技術的誕生。
虛擬化技術演進
(1)物理機時代:多個應用程序可能會跑在一臺機器上。
(2)虛擬機時代:一臺物理機器安裝多個虛擬機(VM),一個虛擬機跑多個程序。
(3)容器化時代:一臺物理機安裝多個容器實例(container),一個容器跑多個程序。
容器化解決了軟件開發過程中一個令人非常頭疼的問題,用一段對話描述:
測試人員:你這個功能有問題。
開發人員:我本地是好的啊。
開發人員編寫代碼,在自己本地環境測試完成后,將代碼部署到測試或生產環境中,經常會遇到各種各樣的問題。明明本地完美運行的代碼為什么部署后出現很多 bug,原因有很多:不同的操作系統、不同的依賴庫等,總結一句話就是因為本地環境和遠程環境不一致。
容器化技術正好解決了這一關鍵問題,它將軟件程序和運行的基礎環境分開。開發人員編碼完成后將程序打包到一個容器鏡像中,鏡像中詳細列出了所依賴的環境,在不同的容器中運行標準化的鏡像,從根本上解決了環境不一致的問題。
容器化技術的尖刀武器
容器化技術的特點:
- 可移植性:不依賴具體的操作系統或云平臺,比如在阿里云或騰訊云直接隨意遷移。
- 占地小:容器只需要其應用程序以及它需要運行的所有容器和庫的依賴清單,不需要將所有的依賴庫都打包在一起。
- 共享 bin 和 lib:不同的容器可以共享 bin 和 lib,進一步節省了空間。
Docker 橫空出世
2010年一位年輕小伙子在美國舊金山成立了一家名叫【dotCloud】的公司, 開發了 Docker的核心技術,從此開啟了容器技術的時代。
后面 dotCloud 公司將自己的容器技術進行了簡化和標準化,取名為 Docker,就是大家熟悉的鯨魚 logo。
2013年dotCloud 公司宣布將 Docker 開源,隨著越來越多的工程師發現了它的優點, Docker 的人氣迅速攀升,成為當時最火爆的開源技術之一。
當前有30%以上的企業在其AWS環境中使用Docker,并且這個數字還在繼續增長。
Docker怎么用?
其實大多數人談論 Docker 時說的是 Docker Engine,這只是一個構建和運行的容器。
在運行容器前需要編寫Docker File,通過 dockerFile 生成鏡像,然后才能運行 Docker 容器。
Docker File 定義了運行鏡像(image)所需的所有內容,包括操作系統和軟件安裝位置。一般情況下都不需要從頭開始編寫 Docker File,在 Docker Hub 中有來自世界各地的工程師編寫好的鏡像,你可以基于此修改。
編排系統的需求催生 k8s
盡管Docker為容器化的應用程序提供了開放標準,但隨著容器越來越多出現了一系列新問題:
- 如何協調和調度這些容器?
- 如何在升級應用程序時不會中斷服務?
- 如何監視應用程序的運行狀況?
- 如何批量重新啟動容器里的程序?
解決這些問題需要容器編排技術,可以將眾多機器抽象,對外呈現出一臺超大機器。現在業界比較流行的有:k8s、Mesos、Docker Swarm。
在業務發展初期只有幾個微服務,這時用 Docker 就足夠了,但隨著業務規模逐漸擴大,容器越來越多,運維人員的工作越來越復雜,這個時候就需要編排系統解救opers。
一個成熟的容器編排系統需要具備以下能力:
- 處理大量的容器和用戶
- 負載均衡
- 鑒權和安全性
- 管理服務通信
- 多平臺部署
k8s與Docker Swarm江湖恩怨
如果你非要拿 Docker 和 k8s 進行比較,其實你更應該拿 Docker Swarm 和 k8s 比較。
Docker Swarm 是 Docker 自家針對集群化部署管理的解決方案,優點很明顯,可以更緊密集成到 Docker 生態系統中。
雖說 Swarm 是 Docker 親兒子,但依舊沒有 k8s 流行,不流行很大程度是因為商業、生態的原因,不多解釋。
k8s是做什么用的?
K8s是Google研發的容器協調器,已捐贈給CNCF,現已開源。
Google 利用在容器管理多年的經驗和專業知識推出了 k8s,主要用于自動化部署應用程序容器,可以支持眾多容器化工具包括現在非常流行的Docker。
目前k8s 是容器編排市場的領導者,開源并公布了一系列標準化方法,主流的公有云平臺都宣布支持。
一流的廠商都在搶占標準的制高點,一堆小廠商跟著一起玩,這就叫生態了。國內的大廠商都在干嘛呢?搶社區團購市場,玩資本游戲,哎?!
K8s 架構和組件
k8s 由眾多組件組成,組件間通過 API 互相通信,歸納起來主要分為三個部分:
- controller manager
- nodes
- pods
Controller Manager,即控制平面,用于調度程序以及節點狀態檢測。
- Nodes,構成了Kubernetes集群的集體計算能力,實際部署容器運行的地方。
- Pods,Kubernetes集群中資源的最小單位。
Docker與k8s 難舍難分
Docker 和 k8s 在業界非常流行,都已經是事實上的標準。
Docker 是用于構建、分發、運行容器的平臺和工具。
而 k8s 實際上是一個使用 Docker 容器進行編排的系統,主要圍繞 pods 進行工作。Pods 是 k8s 生態中最小的調度單位,可以包含一個或多個容器。
Docker 和 k8s 是根本上不同的技術,兩者可以很好的協同工作。
寫在最后
學習技術是一條慢長而艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以:貴在堅持!
最后再分享的一些BATJ等大廠20、21年的面試題,把這些技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由于篇幅有限,上面只是以圖片的形式給大家展示一部分。
領取方式:戳這里即可免費領取
Mybatis面試專題
MySQL面試專題
片轉存中…(img-QN0TQ2Jk-1626932374340)]
Mybatis面試專題
[外鏈圖片轉存中…(img-pxASiqY5-1626932374341)]
MySQL面試專題
[外鏈圖片轉存中…(img-24Qnpi9X-1626932374342)]
并發編程面試專題