docker 入門(二):docker 和 沙盒、虛擬機以及 Kubernetes 的關系

轉載請注明出處:http://m.itdecent.cn/p/d219f35d37e1


做開發(fā)的基本都聽說過沙盒 (Sandbox) 和虛擬機 (Virtual Machine,簡稱 VM) ,如今容器技術很火,其中以 docker 最受大家歡迎。作為一種集群管理工具,K8s 最近也是火的不要不要的。 我們經常會講 docker 和 K8s 聯(lián)系起來,那么兩者之間又存在什么關聯(lián)呢?

一、為什么引入Sandbox 和 VM?

  • 引入 Sandbox 目的:從資源利用的角度看,如何限制一個進程或者一組進程可以使用哪些資源是一個亟待解決的問題,即隔離。Sandbox將一個應用程序或者一組應用程序隔離在一個受限的環(huán)境中,使其無法逃逸;
  • 引入 VM 目的 :比如開發(fā)人員用的電腦??是 Windows OS,但是開發(fā)需要用到 Linux 操作系統(tǒng),這時候就可以在 Windows OS 上安裝一個 VM 來虛擬出 Linux 環(huán)境。

二、Sandbox、VM、容器、Docker 之間的關聯(lián)

首先Sandbox 和 VM都是屬于虛擬技術,用來虛擬軟件運行環(huán)境并具有資源隔離的功能。Sandbox 比較“輕”(只需要虛擬出一個小的環(huán)境)且一旦退出就釋放之前占用的資源;VM 則比較重(虛擬出整個操作系統(tǒng),相當于子電腦)。關于 Sandbox 和 VM 的區(qū)別可以參考博客:http://m.itdecent.cn/p/6acdfd60b014。
容器是屬于 Sandbox 的一種。顧名思義,沙盒就是能夠像一個集裝箱一樣,把你的應用“裝”起來的技術。這樣,應用與應用之間,就因為有了邊界而不至于相互干擾;而被裝進集裝箱的應用,也可以被方便地搬來搬去。容器技術的核心功能,就是通過約束和修改進程的動態(tài)表現(xiàn),從而為其創(chuàng)造出一個“邊界”。正是因為這個邊界才會讓容器里面的程序看不到宿主機上其他的程序從而給程序一種它就是在一個獨立的操作系統(tǒng)上的假象。容器具有如下幾個優(yōu)點:

  • 啟動速度快;
  • 對硬件資源利用率高,一臺主機甚至可以啟用上千個 Docker,且用完即釋放資源;
  • 占用空間小;
容器 V.S. 虛擬機

Docker 是一種輕量級的虛擬化技術,即容器技術。隨著 Docker 的開源,docker 憑借其“輕”的特點得到迅速的普及。

這三個優(yōu)點恰是 VM 的缺點。


三、Docker 的功能和特點

Docker 原意是指處理碼頭集裝箱的工人。首先需要注意的是,Docker 本身不是容器,而是一個開源的應用容器引擎。Docker 讓開發(fā)者可以以統(tǒng)一的方式 打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何安裝了docker引擎的服務器上(包括流行的Linux機器、windows機器),也可以實現(xiàn)虛擬化。從這個描述可以看出 Docker 的幾種常用任務:

  • 創(chuàng)建容器(自己創(chuàng)建、或者從容器倉庫中拉?。?/li>
  • 打包容器(將應用及其依賴打包成一個鏡像);
  • 發(fā)布容器(發(fā)布在另一個 docker 引擎上運行)。
Docker

Docker 的兩句口號很準確地描述了其功能:

1. Build, ship and run
顧名思義,創(chuàng)建、運輸和運行。
舉個例子來理解:比如說我在 A 地建好了一個廠區(qū),該廠區(qū)主要的是車間,其次還有一些配套的生活設施(比如食堂、超市、宿舍、水電等)?,F(xiàn)在我要將廠遷到 B 地,按照常規(guī)思路就是把 A 地的車間拆了運到 B 地重新組裝、并在 B 地建好配套的生活設施,工程量明顯很大。假設現(xiàn)在有一種魔法能夠在A地將車間及其配套的生活設施復制一份并打包成一個鏡像 image(文件),然后將該鏡像遷移到 B 地,這樣在B地馬上就能夠投入使用,省去了拆機、重裝以及搭建配套生活設施的工作,非常方便快捷。
現(xiàn)在我們將車間類比成一個application,將配套的生活設施類比成依賴,那么docker 就是這種魔法

2. Build once, run anywhere
顧名思義,一次創(chuàng)建、隨地運行。
我們知道車間是用于工業(yè)生產的,即一個application。在這個世界,還存在很多其他的application,比如學校、醫(yī)院、寫字樓、商場、體育場等,它們各自負責不同的用途。假設這些 application 都是能夠共享的,那么這個效率將會很高,比如國家A需要用到體育館,可以從國家B復制一個過來;國家B需要用到學校,可以從國家A復制一個過來。Docker 使用的就是這種理念,Docker 中包含三個核心部分:

  • 鏡像文件(image):一個 application 打包成一個鏡像文件;
  • 容器(Container):一個 application 運行在一個容器中,容器之間互不影響;
  • 鏡像倉庫(Repository):存儲鏡像文件的倉庫,就像是圖書館。

鏡像倉庫(Repository)可以是私有的(比如本地機器的 Docker repository),也可以是公有的(比如 Docker 官方提供的Docker Hub、第三方的 Hub)。負責管理鏡像倉庫(Repository)的是 Docker Registry 服務(就像是圖書館管理員)。Docker 官方提供的 Docker Hub 對于鏡像來源有著嚴格的把控,有很多高質量的 application 鏡像,也是開發(fā)人員用的最多的public registry 服務。


四、使用 Kubernetes 管理 Docker

那么為什么需要 Kubernetes 呢?就在 Docker 容器技術被炒得熱火朝天之時,大家發(fā)現(xiàn),如果想要將 Docker 應用于具體的業(yè)務實現(xiàn)(當容器和服務器的數(shù)量達到一定規(guī)模的時候,就會碰到管理的
問題,即如何有效管理大量的服務器和容器,保證應用的穩(wěn)定運行、方便升級和故障的快速解決),是存在困難的——編排、管理和調度等各個方面都不容易。于是就迫切需要一套容器編排工具,能夠對 Docker 和容器進行更高級、靈活的管理。容器編排工具提供圖形化界面或者命令行來管理容器和服務器集群,提供容器配置、任務發(fā)布、服務發(fā)現(xiàn)、負載均衡、系統(tǒng)監(jiān)控和故障恢復、聲明式系統(tǒng)配置以及有關容器部署和性能的規(guī)則和約束定義機制等。
就在這個時候, Google開發(fā)的Kubernetes 從眾多編排工具中脫穎而出,贏下了容器編排工具大戰(zhàn)。Kubernetes 是一種基于容器的集群管理平臺。Kubernetes 是希臘語,意為“舵手、領航員”,大家都習慣將 Kubernetes 簡稱為K8s(ubernete 包含8個字母)。K8s 最初由 Google 創(chuàng)建而后加入 openstack 基金會并發(fā)布了 K8s V1.0。


五、Docker Swarm V.S. Kubernetes

Docker 公司自己有一款名為 Docker Swarm的產品,它是一個容器集群和調度工具,功能類似于Kubernetes。相比 Kubernetes,Swarm在集群搭建和使用上要相對簡單一些,學習和部署成本相對低一些。較新版本的Docker已經集成了Swarm。Swarm支持跨多個主機進行編排,管理較小規(guī)模的容器集群也綽綽有余,對于初學者也可以很快的部署和運行。

六、總結

  • Docker 容器技術主要作用是隔離,通過對系統(tǒng)的關鍵資源的隔離,實現(xiàn)了主機抽象;
  • 容器集群和調度工具(比如 K8s 和 Docker Swarm)是在抽象主機基礎上,實現(xiàn)了集群抽象。

筆者水平有限,如有錯誤,敬請指正!

參考:
https://www.cnblogs.com/misswangxing/p/10669444.html
https://blog.csdn.net/fly910905/article/details/98962455

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容