在線公開課 | 雲原生的基石,一文讀懂容器、Docker、Pod究竟是什麼

Alt

課程概要
雲原生(Cloud Native),是2013年由Pivotal公司率先提出的概念。雲原生以容器化、微服務、可持續交付性,幫助企業構建和運行可彈性擴展的應用。因爲雲原生應用構建簡便快捷,部署輕鬆自如,運行按需伸縮等特色,近年來受到愈來愈多企業的歡迎。
容器是雲原生概念的重要組成部分,做爲一種計算單元,容器能夠以更加輕量化、更小開銷的方式來運行;而做爲一種應用的包裝形式,容器則賦予了應用獨立和便攜的能力。隨着Docker、Kubernetes技術的成熟,容器也成爲了時下最火的開發理念。

根據Gartner的預計,2022年有75%的全球化企業將在生產中使用容器化的應用(當前約爲30%)、50%的應用軟件將容器化適應超融合環境(目前約爲20%)。Docker和Kubernetes將從成爲成爲跨環境的新標準。所以,瞭解容器、Docker的基本概念,是玩轉雲原生開發的基礎。安全

爲了幫助開發者瞭解容器的基本概念及應用場景,3月12日,京東智聯雲產品研發部專家架構師劉俊輝爲你們開啓了《六週玩轉雲原生》系列技術公開課的第一講。劉俊輝老師以《容器與Pod簡介》爲主題,從容器的構成、Docker的基本概念、容器的典型應用、Pod的基本概念、容器安全與京東智聯雲原生容器等方面,爲開發者系統梳理了容器的相關知識。服務器

同時,經過容器與Pod的「課後做業」,鼓勵參會的小夥伴在課後親自動手,從而加深印象。(點擊「閱讀」可獲取實操文檔哦~)那麼,劉俊輝老師究竟分享了哪些乾貨?容器和Pod到底是什麼?讓咱們一塊兒來回顧一下精華內容吧!網絡

六週玩轉雲原生

容器入門:Docker、Pod初探

— 京東智聯雲 劉俊輝—架構

01容器是什麼?

要給容器下一個準確的定義,是一件不容易的事情,由於每一個人看待容器的視角有所不一樣。在劉俊輝看來,容器既是一種計算單元的提供方式;又是一種應用的包裝形式。函數

- 容器是一種計算單元微服務

做爲一種計算單元,容器與線程、進程、虛擬機、物理機同樣(以下圖所示)。在連續尺度上,越往左隔離性、安全性和開銷越低,越往右則越高。而容器則偏偏是介於進程和虛擬機之間的一種計算單元。工具

在這裏插入圖片描述

但並不是全部的應用都適合選擇容器,開發者能夠根據本身應用的特色和需求選擇最適合的計算單元。例如,你的應用是高性能、互信的,且處於同一個管理區域,那麼用線程或者進程就能夠知足;但若是你的應用是多租戶的,而且和其餘應用運行在同一個空間,那麼你就須要考慮如何將這些應用安全地隔離開,使得數據不會被泄露或性能受到影響。那麼這時,容器也許就是一個不錯的選擇了。性能

由於容器是一個「高度隔離的進程」,它在通常進程的隔離基礎上又增長了新的隔離機制,這些隔離機制是使用Linux的內核提供的,它包括一些命名空間(Name Spaces)和CGroup。命名空間能夠分爲網絡、存儲和計算三大類。其中,最爲重要的是網絡命名空間。它保證了容器的網絡是獨立於其餘容器網絡的。每一個容器本身看到的文件系統和其餘容器的是不共享的,每一個容器只能看到本身的進程ID,而進程編號也是連續的。學習

而說到容器與虛擬機最大的區別,劉俊輝認爲,相對於虛擬機,容器最大的特徵是它沒有本身獨立的操做系統,而是共享其宿主機上的一個操做系統;而虛擬機則運行在「一臺獨立的服務器上」。所以,容器相比於虛擬機的成本會小,但隔離性卻有所欠缺。測試

- 容器是一種應用的包裝形式

有過應用開發經驗的人都知道,應用並非一個單一的可執行文件,一個稍微複雜一點的應用包括多個部分,包括:代碼、可執行文件、配置依賴、外部依賴(動態連接庫)等。

因此在應用發行包裝的時候,須要考慮目標操做系統的版本、系統架構以及它所依賴的模塊等因素。不然應用安裝時會改動系統的不一樣部分。

而容器做爲一個應用的包裝,它最大的特色就是實現了應用的獨立和便攜,容器自己包含了應用全部的依賴,這使得它能夠再任意的基礎設施上運行,不會由於系統版本、架構的問題,而致使各類意外。

02Docker是什麼?

簡單來講,Docker能夠看做是一個很是成功的容器管理平臺。Docker最重要的部分就是它的運行管理環境(以下圖所示)。

在這裏插入圖片描述

正如上面所說,容器是一個計算單元,那麼Docker的運行環境就是用來建立、管理和銷燬這些計算單元的。在建立和管理這些計算單元的時候,須要用到計算單元的包裝(也就是它的軟件發行包),這些包裝以容器鏡像的方式存放在它的運行環境中,全部的容器計算單元都是經過這些鏡像來建立的。

但鏡像自己會有版本的發佈、升級等需求,這就涉及到Docker的另外一個重要組成部分DockerHub了。DockerHub有點像蘋果的App Store,它是一個很是大的「容器市場」,全部經常使用的軟件均可以在DockerHub上找到。

最後一個Docker的重要模塊,就是用戶界面和管理工具,它們用來向容器的運行環境發佈命令或查看狀態。只須要用一個Docker的命令加上一些參數,就能夠實現建立、刪除、查看容器的運行狀況等操做。

接下來咱們就來看看Docker的實際操做狀況,咱們會以運行一個Hello World的容器爲例,講講Docker的使用狀況。其實,只須要安裝好Docker就能夠嘗試運行這個Hello World的容器了。

經過下面代碼,咱們來看看Docker作了些什麼:

在這裏插入圖片描述

首先咱們看到Docker在本地要去找Hello World最新版本的鏡像,它發現本地並無這個鏡像後去DockerHub上把這個鏡像給下載了下來。而後,這個鏡像就被運行了,以後Docker後臺就建立了這樣一個容器。

Docker的出現,讓容器應用管理變得很是輕鬆,運行容器只須要一個命令就能夠實現。而從DockerHub上下載鏡像、建立各類各樣的隔離環境、建立容器與外部的網絡通訊環境均可以由Docker來完成。能夠說Docker能夠管理容器的整個生命週期。

03容器vs.虛擬機,伐木工的斧與鋸

做爲對容器的總結,咱們能夠把容器最大的特色概括爲輕量級和徹底獨立部署。這兩大特色與雲原生的彈性無限擴展和按需使用的定位十分吻合,也正由於如此,容器成爲了雲原生的基石。

雖然容器和虛擬機都是計算單元,但從虛擬機到容器,並不能看作是一個簡單的性能提高或架構的改變,而是一種應用理念的改變。

舉個例子,從前伐木工人看書的時候會用斧子,後來你們以爲用斧子太費力氣,有個高人就介紹了另外一個砍樹的工具「鋸子」。但若是伐木工人拿着鋸子去砍樹的話,會發現尚未斧子好用。但事實是,斧子和鋸子是兩種使用的理念。

而說回容器和虛擬機理念的不一樣,咱們能夠經過下面的圖表來進一步感覺。

在這裏插入圖片描述

容器的典型應用能夠分爲兩類,一類是微服務,一類是DevOps。

微服務是指系統的不一樣單元或功能運行不一樣的容器,每個服務的容器數量能夠根據本身的負載進行調整。好比,一個大系統包含用戶登陸、貨品展現、貨品交互等功能,但這個系統的各個部分並非同時線性增長的,有些部分可能忙一些,有些部分的容量可能還有富餘。

在這裏插入圖片描述

DevOps是指開發者、測試、生產過程流水線化。由於容器的「自包含」特性,當它做爲標準的流通物品,可使開發環境、測試環境和生產環境的應用包裝徹底一致,這樣就減小了應用因爲依賴關係配置錯誤等致使的意外,從而使得開發、測試、生產的整個流水線變得更高效。

在這裏插入圖片描述

04 Pod,一種加強型容器

Pod是一種組合的多容器運行單元,也是Kubernetes裏的一個基礎單元。你能夠把它看做是一種容器的擴展或者加強型的容器。Pod裏面包括一個主容器和數個輔助容器,它們共同完成一個特定的功能。把多個進程(容器也是一種隔離的進程)打包在一個Name Space裏的時候,就構成了一個Pod。Pod裏面不一樣進程的應用包裝仍然是獨立的(每一個容器都會有本身的鏡像)。

Pod的意義在於,它能夠既保持主容器和輔助容器的的密切關係,又保持主容器的獨立性。因爲主容器和輔助容器的生命週期相同,能夠同時被建立和銷燬,所以把它們放在一個Pod中,可使他們的交互更加高效。

而另外一方面,主容器須要完成一些主要的工做,而另外一些工做多是有共性的,就能夠單獨打包由輔助容器來運行。

很是推薦你們去一個叫Katacoda的網站,它上面有大量免費的在線實驗,包括Docker及Docker Image等動手操做項目,並且如今是徹底免費的。你們不妨去這裏動手實操起來。

05京東智聯雲原生容器,安全爲王

最後,劉俊輝老師就京東智聯雲原生容器作了相關的介紹。在介紹以前,他先着重講解了安全性對於容器產品的重要性。

當一個容器平臺運行多個租戶應用的時候,很容易發生「側向攻擊」,即進程利用系統的漏洞來進行權限提高,例如把本身的權限升級成管理員,從而得到對系統上運行的其餘進程或容器的操做權限。目前這類漏洞一般會致使惡意的使用計算資源用來「挖礦」。

針對這一問題,目前有兩種解決方案,一種是「限制系統調用」;一種是「獨立內核」。

限制系統調用,指的是經過限制應用的系統調用,來下降應用的能力,從而避免對其餘應用的危害。目前,Google的Givsor和IBM的Nabla都是採用的這種作法。以下圖所示,原來一個應用會訪問到全部的系統調用,但在Nabla的模式下,應用只會訪問必要的系統調用,其餘調用則都被屏蔽了。

在這裏插入圖片描述

但這種方法的弊端在於,它須要你在一開始就要給應用開放「恰到好處」的權限,若是一不當心沒有開放足夠的權限,那應用就可能會崩潰。

獨立內核則參考了虛擬機的解決方案,它是指在容器中增長一個新的內核,這個內核是輕量化的,包括「微內核」和Unikernel兩種實現方式。Unikernel和應用是編譯在一塊兒的,它們之間能夠直接經過函數調用,而不須要系統調用。

這一方案的好處在於,容器本質上只是跟本身的內核打交道,而內核則是跟宿主機打交道,內核與宿主機的交互只須要一些通用的指令便可,不涉及到直接調用到危害系統的指令。目前Kata Container和京東智聯雲原生容器,就是採用的這種方式。

這種方式的好處在於,微內核做爲一個最小化的操做系統,能夠知足全部系統的調用,同時去除一些沒必要要的系統操做部分;它的系統啓動時間很是短,能夠達到秒級,同時開銷比虛擬機要小。

除了安全性以外,京東智聯雲原生容器還有許多其餘的優點,總結起來包括如下幾個方面:

  • 兼具虛機的安全性和容器的靈活性;
  • 採用獨立微內核,提供與虛機相同級別的安全保證;
  • 使用標準Docker鏡像直接啓動,無需安裝配置宿主機;
  • 具備與虛機能力相同的計算、網絡、存儲能力;
  • 支持容器和Pod,支持Kubernetes集羣。

經過本次學習,開發者和對雲原生感興趣的小夥伴對容器的基本概念有了全面的瞭解,在老師分享環節以後,有很多學員都經過提問的方式與老師進一步交流,劉俊輝老師也就你們常見的疑問進行了耐心的解答。

值得留意的是,京東智聯雲還爲本次課程設置了「課後做業」環節,做業包括兩個部分:1. 使用京東智聯雲上的雲主機,安裝Docker運行環境,瞭解Docker運行、管理容器的基本操做,使用Linux系統工具,探索容器和Pod的基本結構;2. 使用京東智聯雲直接建立原生容器,經過京東智聯雲控制檯對容器進行基本操做。瞭解、體驗原生容器與Docker容器的異同。經過課後練習進一步夯實對容器和Pod的理解,同時完成做業並提交的同窗,均可以得到精美的小禮品。

在這樣一頓操做以後,不少參加課程的小夥伴都紛紛表示此次課程簡直是「幫助小白走近了容器世界的大門」,並對下次課程充滿期待!

在瞭解了容器的基本概念以後,第二次課程將以你們廣泛關心的Kubernetes爲主題,對Kubernetes的基本概念和構成進行全面講解,也會延續第一期乾貨滿滿的畫風。

這裏提醒你們一下,《六週玩轉雲原生》的第二期課程將在3月24日晚上8點進行。

小夥伴們千萬不要錯過!點擊下方連接,直接加入吧!👇👇👇

課程報名 | 《六週玩轉雲原生》- 給小白的Kubernetes技術課

雲原生的時代已來,而你,也將成爲這個新時代的構建者之一!

劃重點!

點擊【閱讀】獲取課程實操文檔

Alt

Alt

相關文章
相關標籤/搜索