容器

menu icon

容器

本指南著眼於容器在雲端運算中的重要性,重點介紹核心優勢,並導覽 Docker、Kubernetes、Istio 和 Knative 中相關技術的新興生態系統。

何謂容器?

容器是軟體的可執行程式單元,其中應用程式碼會連同其程式庫和相依關係,以一般方式一起包裝,以便可以在任何位置執行,不論是在桌面、傳統 IT 或雲端上。

為此,容器採用作業系統 (OS) 虛擬化形式,其中利用 OS 的特性(若是 Linux 核心,即名稱空間和 cgroups 基本元素)會來隔離處理程序,並控制這些處理程序有權存取多少數量的 CPU、記憶體及磁碟。

容器小巧、快速、具可攜性,因為與虛擬機器不同,容器不需要在每個實例中包含訪客作業系統,而且可以簡單地利用主機 OS 的功能和資源。

容器在幾十年前首次出現在 FreeBSD Jails 和 AIX Workload Partitions 等版本中,但大多數現代開發人員還記得 2013 年是現代容器時代的開始,推出了 Docker

容器與虛擬機器 (VM)

更瞭解容器的一種方式是瞭解它與傳統的虛擬機器 (VM) 有何不同。 在傳統的虛擬化中,無論是在內部部署還是在雲端中 - Hypervisor 會用來虛擬化實體硬體。 然後每個虛擬機器都會包含訪客作業系統、執行作業系統所需硬體的虛擬副本,以及應用程式與其相關聯的程式庫和相依關係。

容器並不會將基礎硬體虛擬化,它會虛擬化作業系統(通常是 Linux),因此每個個別容器都 包含應用程式及其程式庫和相依關係。 缺少訪客作業系統就是容器為何如此輕量從而快速可攜的原因。

如需更深入瞭解此比較,請查看「容器與 VM:有何不同

容器的優勢

容器的主要優勢,尤其是與 VM 相比,是提供了一個抽象層次,使其輕量可攜。

  • 輕量型:容器共用機器 OS 核心,無需每個應用程式都需要一個完整的作業系統實例,並使容器檔案變得小且易於使用資源。它們的規模較小,特別是與虛擬機器相比,意味著它們可以快速啟動、更良好地支援水平橫向擴充的雲端原生應用程式。
  • 可攜式與獨立式平台: 容器攜帶它們的所有相依關係,這表示軟體可以寫入一次,然後執行,而無需在筆記型電腦、雲端和內部部署運算環境中重新配置。
  • 支援現代發展與架構: 由於容器跨平台部署可攜性/一致性且其規模很小,它非常適合現代開發和應用程式型樣,例如 DevOps無伺服器微服務,其建置為小增量的一般程式碼部署。
  • 改進使用率: 與它們之前的 VM 一樣,容器可讓開發人員和操作員改善實體機器的 CPU 和記憶體使用率。容器更進一步的優勢在於,因為它們還支援微服務架構,所以可以更精細地部署和擴展應用程式元件。這是改用容器最吸引人之處,而不是因為單一元件在負載上掙扎而不得不擴展整個整合型應用程式。

在最近的 IBM 意見調查中 (PDF, 1.4MB),開發人員和 IT 高階主管報告使用容器的許多其他好處。使用下面的互動工具探索它們:

下載完整報告,企業中的容器 (PDF, 1.4MB)

容器的使用案例

容器變得越來越受到重視,尤其是在雲端環境中。 許多組織甚至將容器視為替代 VM 作為其應用程式和工作負載的通用運算平台。 但在這個非常廣泛的範圍內,有一些關鍵的使用案例與容器特別相關。

  • 微服務: 容器小巧輕量,非常適用於微服務架構,這些架構中的應用程式由許多鬆散耦合且可獨立部署的較小服務建構而成。
  • DevOps: 「微服務即架構」和「容器即平台」的組合,是許多團隊以建置、傳送和執行軟體方法來擁抱 DevOps 的共同基礎。
  • 混合多雲: 因為容器幾乎可以在任何地方執行,橫跨筆記型電腦、內部部署和雲端環境,因此它們是混合雲多雲實務範例的理想基礎架構,組織可透過結合本身的資料中心,在多個公有雲的混合中運作。
  • 應用程式現代化與移轉: 其中一個最常用的方法是透過容器化來啟動應用程式現代化,讓它們可以移轉至雲端

容器化

軟體需要用不同的方式設計和包裝,以利用容器,通常稱為容器化的處理程序。

當容器化應用程式時,該程序包括將應用程式與其相關的環境變數、配置檔、程式庫及軟體相依關係包裝在一起。結果是一個容器映像檔,之後可以在容器平台上執行它。 如需相關資訊,請查看此影片「容器化介紹 ( Containerization Explained)」 (08:09):

使用 Kubernetes 進行容器編排

隨著公司開始擁抱容器,通常作為現代、雲端原生架構的一部分,個別容器的簡易性開始與分散式系統中管理數百(甚至數千個)的容器的複雜性相衝突。

為了應對此挑戰,會使用容器協調這種新方法來管理整個生命週期中大量的容器,包括:

  • 佈建
  • 備援
  • 性能監視
  • 資源配置
  • 規模調整與負載平衡
  • 在實體主機之間移動

雖然建立了許多容器協調平台,如 Apache Mesos、Nomad 和 Docker Swarm,以協助解決這些挑戰,Kubernetes 在 2014 年推出的開放原始碼專案,很快就成為最受歡迎的容器協調平台,而且是最主要的業界標準化平台。

Kubernetes 可讓開發人員及操作員透過 YAML 檔案,宣告其整體容器環境需要的狀態,然後 Kubernetes 會執行建立及維護該狀態的所有辛苦工作,其進行的活動包括部署給定應用程式或工作負載的指定實例數目、應用程式失敗時重新啟動、負載平衡、自動擴充、零關閉時間部署等。

為了進一步瞭解 Kubernetes,Sai Vennam 在下面影片中概述了 Kubernetes (10:59):

 

Kubernetes 目前由雲端原生運算基金會 (CNCF) 營運,該基金會是 Linux 基金會贊助的不限供應商的產業集團。

Istio、Knative 和擴充的容器生態系統

一直以來,容器是一種熱門的包裝和執行應用程式的方式,所以繼續獲得動力,促使專門設計來加強和擴展生產使用案例的工具和專案生態系統繼續增長。在 Kubernetes 之外,容器生態系統中最受歡迎的兩個專案是 Istio 和 Knative。

Istio

隨著開發人員利用容器來建置和執行微服務架構,管理問題超越個別容器的生命週期考量,而改用一種使用大量小型服務,通常稱為「服務網格」的方式,彼此連接並相互關聯。 已建立 Istio,讓開發人員更容易管理與探索、資料流量、監視、安全等項目相關的挑戰。 如需 Istio 的相關資訊,請參閱「什麼是 Istio?」並觀看這部 Istio 介紹影片 (05:06):

 

Knative

無伺服器架構在熱門程度上也持續成長,尤其在雲端原生社群中。Knative 最珍貴之處是其可以將容器化服務部署為無伺服器功能

不是在所有時間執行而是在需要時回應(如同伺服器所做),無伺服器功能可以「調整到零」,這表示除非在呼叫它時,否則不予執行。 當套用至數萬個容器時,此模型可節省龐大的運算能力。

如需 Knative 的相關資訊,請觀看下列名為「什麼是 Knative?」的影片 (07:58):

容器與 IBM Cloud

IBM Cloud 容器服務是建置在開放原始碼技術上,以促進並加速您的雲端之旅。 使用持續整合與持續交付 (CI/CD) 工具建置容器化應用程式。使用受管理的 Red Hat OpenShiftKubernetes 服務來協調容器。 在 IBM Cloud Paks 中以容器化的 IBM 中介軟體及開放原始碼元件,將現有應用程式現代化。

進一步瞭解 IBM Cloud 上的容器

請註冊 IBMid 並建立您的 IBM Cloud 帳戶