雲時代架構閱讀筆記8——容器技術

1、什麼是容器?

容器這個詞,當你第一眼看它或許腦子裏是這東西:瓶瓶罐罐、裝水、裝其餘東西的玩意。git

img

無論是什麼,總的來講,容器給人第一印象就是——「裝」。docker

那今天咱們要說的容器技術是怎麼一個概念呢?其實,IT裏的容器技術是英文單詞Linux Container的直譯。container這個單詞有集裝箱、容器的含義(主要偏集裝箱意思)。不過,在中文環境下,我們要交流要傳授,若是翻譯成「集裝箱技術」 就有點拗口,因此結合中國人的吐字習慣和文化背景,更喜歡用容器這個詞。不過,若是要形象的理解Linux Container技術的話,仍是得念成集裝箱會比較好。咱們知道,海邊碼頭裏的集裝箱是運載貨物用的,它是一種按規格標準化的鋼製箱子。集裝箱的特點,在於其格式劃一,並能夠層層重疊,因此能夠大量放置在特別設計的遠洋輪船中(早期航運是沒有集裝箱概念的,那時候貨物雜亂無章的放,很影響出貨和運輸效率)。有了集裝箱,那麼這就更加快捷方便的爲生產商提供廉價的運輸服務。安全

img

所以,IT世界裏借鑑了這一理念。早期,你們都認爲硬件抽象層基於hypervisor的虛擬化方式能夠最大程度上提供虛擬化管理的靈活性。各類不一樣操做系統的虛擬機都能經過hypervisor(KVM、XEN等)來衍生、運行、銷燬。然而,隨着時間推移,用戶發現hypervisor這種方式麻煩愈來愈多。爲何?由於對於hypervisor環境來講,每一個虛擬機都須要運行一個完整的操做系統以及其中安裝好的大量應用程序。但實際生產開發環境裏,咱們更關注的是本身部署的應用程序,若是每次部署發佈我都得搞一個完整操做系統和附帶的依賴環境,那麼這讓任務和性能變得很重和很低下。服務器

基於上述狀況,人們就在想,有沒有其餘什麼方式能讓人更加的關注應用程序自己,底層多餘的操做系統和環境我能夠共享和複用?換句話來講,那就是我部署一個服務運行好後,我再想移植到另一個地方,我能夠不用再安裝一套操做系統和依賴環境。這就像集裝箱運載同樣,我把貨物一輛蘭博基尼跑車(比如開發好的應用APP),打包放到一容器集裝箱裏,它經過貨輪能夠垂手可得的從上海碼頭(CentOS7.2環境)運送到紐約碼頭(Ubuntu14.04環境)。並且運輸期間,個人蘭博基尼(APP)沒有受到任何的損壞(文件沒有丟失),在另一個碼頭卸貨後,依然能夠完美風騷的賽跑(啓動正常)。架構

img

Linux Container容器技術的誕生(2008年)就解決了IT世界裏「集裝箱運輸」的問題。Linux Container(簡稱LXC)它是一種內核輕量級的操做系統層虛擬化技術。Linux Container主要由Namespace和Cgroup兩大機制來保證明現。那麼Namespace和Cgroup是什麼呢?剛纔咱們上面提到了集裝箱,集裝箱的做用固然是能夠對貨物進行打包隔離了,不讓A公司的貨跟B公司的貨混在一塊兒,否則卸貨就分不清楚了。那麼Namespace也是同樣的做用,作隔離。光有隔離還沒用,咱們還須要對貨物進行資源的管理。一樣的,航運碼頭也有這樣的管理機制:貨物用什麼樣規格大小的集裝箱,貨物用多少個集裝箱,貨物哪些優先運走,遇到極端天氣怎麼暫停運輸服務怎麼改航道等等... 通用的,與此對應的Cgroup就負責資源管理控制做用,好比進程組使用CPU/MEM的限制,進程組的優先級控制,進程組的掛起和恢復等等。運維

img

2、容器技術的特色

容器的特色其實咱們拿跟它跟硬件抽象層虛擬化hypervisor技術對比就清楚了,咱們以前也提到過,傳統的虛擬化(虛擬機)技術,建立環境和部署應用都很麻煩,並且應用的移植性也很繁瑣,好比你要把vmware裏的虛擬機遷移到KVM裏就很繁瑣(須要作鏡像格式的轉換)。那麼有了容器技術就簡單了,總結下容器技術主要有三個特色:微服務

  • \1. 極其輕量:只打包了必要的Bin/Lib;
  • \2. 秒級部署:根據鏡像的不一樣,容器的部署大概在毫秒與秒之間(比虛擬機強不少);
  • \3. 易於移植:一次構建,隨處部署;
  • \4. 彈性伸縮:Kubernetes、Swam、Mesos這類開源、方便、好使的容器管理平臺有着很是強大的彈性管理能力。

img

3、容器的標準化

當前,docker幾乎是容器的代名詞,不少人覺得docker就是容器。其實,這是錯誤的認識,除了docker 還有coreos。因此,容器世界裏並非只有docker一家。既然不是一家就很容易出現分歧。任何技術出現都須要一個標準來規範它,否則各搞各的很容易致使技術實現的碎片化,出現大量的衝突和冗餘。所以,在2015年,由Google,Docker、CoreOS、IBM、微軟、紅帽等廠商聯合發起的OCI(Open Container Initiative)組織成立了,並於2016年4月推出了第一個開放容器標準。標準主要包括runtime運行時標準和image鏡像標準。標準的推出,有助於替成長中市場帶來穩定性,讓企業能放心採用容器技術,用戶在打包、部署應用程序後,能夠自由選擇不一樣的容器Runtime;同時,鏡像打包、創建、認證、部署、命名也都能按照統一的規範來作。工具

兩種標準主要包含如下內容:性能

  1. 容器運行時標準 (runtime spec)

a). creating:使用 create 命令建立容器,這個過程稱爲建立中 b). created:容器建立出來,可是尚未運行,表示鏡像和配置沒有錯誤,容器可以運行在當前平臺 c). running:容器的運行狀態,裏面的進程處於 up 狀態,正在執行用戶設定的任務 d). stopped:容器運行完成,或者運行出錯,或者 stop 命令以後,容器處於暫停狀態。這個狀態,容器還有不少信息保存在平臺中,並無徹底被刪除測試

  1. 容器鏡像標準(image spec)

a). 文件系統:以 layer 保存的文件系統,每一個 layer 保存了和上層之間變化的部分,layer 應該保存哪些文件,怎麼表示增長、修改和刪除的文件等; b). config 文件:保存了文件系統的層級信息(每一個層級的 hash 值,以及歷史信息),以及容器運行時須要的一些信息(好比環境變量、工做目錄、命令參數、mount 列表),指定了鏡像在某個特定平臺和系統的配置。比較接近咱們使用 docker inspect 看到的內容; c). manifest 文件:鏡像的 config 文件索引,有哪些 layer,額外的 annotation 信息,manifest 文件中保存了不少和當前平臺有關的信息; d). index 文件:可選的文件,指向不一樣平臺的 manifest 文件,這個文件能保證一個鏡像能夠跨平臺使用,每一個平臺擁有不一樣的 manifest 文件,使用 index 做爲索引。

4、容器的主要應用場景

容器技術的誕生其實主要解決了PAAS的層的技術實現。像OpenStack、Cloudstack這樣的技術是解決IAAS層的問題。IAAS層和PAAS層你們估計也聽得不少了,關於他們的區別和特性我這裏不在描述。那麼容器技術主要應用在哪些場景呢?目前主流的有如下幾種:

\1. 容器化傳統應用 容器不只能提升現有應用的安全性和可移植性,還能節約成本。

每一個企業的環境中都有一套較舊的應用來服務於客戶或自動執行業務流程。即便是大規模的單體應用,經過容器隔離的加強安全性、以及可移植性特色,也能從 Docker 中獲益,從而下降成本。一旦容器化以後,這些應用能夠擴展額外的服務或者轉變到微服務架構之上。

\2. 持續集成和持續部署 (CI/CD) 經過 Docker 加速應用管道自動化和應用部署,交付速度提升至少 13 倍。

現代化開發流程快速、持續且具有自動執行能力,最終目標是開發出更加可靠的軟件。經過持續集成 (CI) 和持續部署 (CD),每次開發人員簽入代碼並順利測試以後,IT 團隊都可以集成新代碼。做爲開發運維方法的基礎,CI/CD 創造了一種實時反饋迴路機制,持續地傳輸小型迭代更改,從而加速更改,提升質量。CI 環境一般是徹底自動化的,經過 git 推送命令觸發測試,測試成功時自動構建新鏡像,而後推送到 Docker 鏡像庫。經過後續的自動化和腳本,能夠將新鏡像的容器部署到預演環境,從而進行進一步測試。

\3. 微服務 加速應用架構現代化進程。

應用架構正在從採用瀑布模型開發法的單體代碼庫轉變爲獨立開發和部署的鬆耦合服務。成千上萬個這樣的服務相互鏈接就造成了應用。Docker 容許開發人員選擇最適合於每種服務的工具或技術棧,隔離服務以消除任何潛在的衝突,從而避免「地獄式的矩陣依賴」。這些容器能夠獨立於應用的其餘服務組件,輕鬆地共享、部署、更新和瞬間擴展。Docker 的端到端安全功能讓團隊可以構建和運行最低權限的微服務模型,服務所需的資源(其餘應用、涉密信息、計算資源等)會適時被建立並被訪問。

\4. IT 基礎設施優化 充分利用基礎設施,節省資金。

Docker 和容器有助於優化 IT 基礎設施的利用率和成本。優化不只僅是指削減成本,還能確保在適當的時間有效地使用適當的資源。容器是一種輕量級的打包和隔離應用工做負載的方法,因此 Docker 容許在同一物理或虛擬服務器上絕不衝突地運行多項工做負載。企業能夠整合數據中心,將併購而來的IT資源進行整合,從而得到向雲端的可遷移性,同時減小操做系統和服務器的維護工做。

問答

相關文章
相關標籤/搜索