Docker

menu icon

Docker

Docker 是一個開放原始碼平台,用於建置、部署及管理容器化應用程式。瞭解容器、容器與 VM 的比較,以及為何 Docker 如此被廣泛地採用及使用。

何謂 Docker?

Docker 是開放原始碼容器化平台。它可讓開發人員將應用程式包裝到容器,這是一種標準化的可執行元件,將應用程式原始碼與在任何環境中執行該程式碼所需的作業系統 (OS) 程式庫及相依關係結合在一起。容器可簡化分散式應用程式的遞送,且隨著組織轉移至雲端原生開發及混合多雲環境,已變得越來越受歡迎。

開發人員可以不使用 Docker 來建立容器,但此平台可讓建置、部署及管理容器更容易、更簡單且更安全。Docker 本質上是一個工具箱,可讓開發人員透過單一 API 使用簡單的指令和無需工作的自動化,來建置、部署、執行、更新和停止容器。

Docker 也是指 Docker Inc.(IBM 外部鏈結)、銷售 Docker 商業版本的公司,以及由 Docker Inc. 及許多其他組織及個人提供的 Docker 開放原始碼專案(IBM 外部鏈結)。

容器的運作方式,以及它們為何如此受歡迎

透過內建於 Linux 核心的程序隔離和虛擬化功能,使容器得以實現。這些功能 - 例如,用於在程序之間配置資源的控制群組 (Cgroups),以及用於限制處理程序對系統中其他資源或區域的存取或可見性的名稱空間 - 使多個應用程式元件能夠共用主機作業系統單一實例的資源,這與 Hypervisor 可讓多個虛擬機器 (VM) 共用單一硬體伺服器的 CPU、記憶體及其他資源的方式大致相同。

因此,容器技術提供 VM 的所有功能和好處 - 包括應用程式隔離、具成本效益的可擴充性及可移除性 -加上其他重要的優勢:

  • 輕量型: 不同於 VM,容器不執行整個 OS 實例及 Hypervisor 的有效負載;它們只包括執行程式碼所需的 OS 處理程序和相依關係。容器大小是以 MB 為測量單位(有些 VM 則是以 GB 為單位),能更有效地使用硬體容量,並能更快啟動。
  • 提高資源效率:利用容器,您可以在相同硬體上,執行數倍於使用 VM 所能執行的應用程式副本數。這可以減少您的雲端費用支出。
  • 提高開發人員生產力:相較於 VM,容器更快、更容易部署、佈建及重新啟動。這使得它們適合在持續整合持續交付 (CI/CD) 管線中使用,更適合採用「敏捷」和 DevOps 實務作法的開發團隊。

使用容器的公司報告其他好處,包括提高應用程式品質、更快回應市場變化等。進一步瞭解此互動式工具:

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

為何使用 Docker?

現今 Docker 很受歡迎,Docker 和「容器」是可交換使用的詞。但第一個容器相關技術多年前就已被提出 — 甚至數十年前(IBM 外部鏈結)— 在 Docker 於 2013 對外公開發表之前。

最值得注意的是,在 2008年,LinuXContainers (LXC) 在 Linux 核心中實作,完全實現了 Linux 單一實例的虛擬化。雖然 LXC 目前仍在使用中,但已有使用 Linux 核心的更新技術。Ubuntu 是一個現代化的開放原始碼 Linux 作業系統,也提供了這項功能。

Docker 透過能夠提供下列各項的技術來加強原生 Linux 容器化功能:

  • 經改良、具無縫完美的可攜性:雖然 LXC 容器通常會參照機器特定配置,但 Docker 容器在任何桌面、資料中心和雲端環境中都不必修改就可執行。
  • 更輕量型和更精細的更新:使用 LXC,可以將多個程序結合在單一容器中。使用 Docker 容器,在每一個容器中只有一個程序可以執行。這可讓您建置可持續執行的應用程式,而該應用程式的其中一部分已被關閉以進行更新或修復。
  • 自動建立容器: Docker 可根據應用程式原始碼自動建置容器。
  • 容器版本化: Docker 可以追踨容器映像檔的版本、回復至舊版,以及追踨誰建置該版本以及如何執行。它甚至可以只上傳現有版本與新版本之間的差異。
  • 容器重複使用: 現有的容器可以用來作為基本映像檔 - 本質上類似用於建置新容器的範本。
  • 共用容器程式庫: 開發人員可以存取一個開放原始碼登錄,其中包含數千個使用者提供的容器。

現今,Docker 容器化也適用於 Microsoft Windows 伺服器。而大部分雲端供應商都提供特定服務,以協助開發人員建置、傳送及執行以 Docker 進行容器化的應用程式。

基於這些原因,Docker 的採用快速爆發並持續飆升。在此篇文件中,Docker Inc. 報告每個月有 1,100 萬個開發者和 130 億容器映像檔下載(IBM 外部鏈結)。

Docker 工具和術語

使用 Docker 時,您將遇到的一些工具和術語包括:

DockerFile

每一個 Docker 容器都以簡單的文字檔開始,其中包含如何建置 Docker 容器映像檔的指示。DockerFile 自動執行建立 Docker 映像檔的程序。 它基本上是一個指令行介面 (CLI) 指令清單,Docker Engine 將執行這些指令,以組合映像檔。

Docker 映像檔

Docker 映像檔 包含可執行的應用程式原始碼,以及應用程式碼需要作為容器執行的所有工具、程式庫及相依關係。當您執行 Docker 映像檔時,它會變成容器的一個實例(或多個實例)。

可以從頭開始建置 Docker 映像檔,但大部分開發人員會將它們從一般儲存庫中取出。可以從單一基本映像檔建立多個 Docker 映像檔,它們將共用其堆疊的共同性。

Docker 映像檔由 組成,每一層對應於映像檔的一個版本。每當開發人員對映像檔進行變更時,會建立新的上層階層,而此上層會取代前一個上層作為映像檔的現行版本。已儲存前一層以便用於回復或在其他專案中重複使用。

每次從 Docker 映像檔建立容器時,就會建立另一個稱為容器層的新層。對容器所做的變更 - 例如新增或刪除檔案 - 只會儲存至容器層,而且只有在容器執行時才會存在。此反覆運算式映像檔建立程序可提高整體效率,因為可以只從單一基本映像檔執行多個即時容器實例,而當它們這麼做時,它們會利用共用堆疊。

Docker 容器

Docker 容器是執行 Docker 映像檔的即時實例。 雖然 Docker 映像檔是唯讀檔案,但容器是即時的、暫時的、可執行的內容。使用者可以與它們互動,管理者可以使用 docker 指令來調整其設定和條件。

Docker Hub

Docker Hub(IBM 外部鏈結)是 Docker 映像檔的公用儲存庫,其自稱為「世界上最大的容器映像檔程式庫和社群」。 它擁有超過 100,000 個容器映像檔,來自商業軟體供應商、開放原始碼專案,以及個別開發人員。 其中包括已由 Docker Inc. 所產生的映像檔,以及屬於 Docker Trusted Registry 的經認證映像檔,以及數千個其他映像檔。

所有 Docker Hub 使用者都可以隨意共用其映像檔。他們也可以從 Docker 檔案系統下載預先定義的基本映像檔,以作為任何容器化專案的起始點。

Docker 常駐程式

Docker 常駐程式是在您的作業系統上執行的服務,例如 Microsoft Windows 或 Apple MacOS 或 iOS。此服務會使用來自用戶端的指令,來建立及管理您的 Docker 映像檔,作為 Docker 實作的控制中心。

Docker 登錄

Docker 登錄是 Docker 映像檔的可擴充開放原始碼儲存及配送系統。此登錄可讓您在儲存庫中追蹤映像檔版本,並使用標記來識別它們。這是使用 git 版本控制工具來完成的。

Docker 部署和協調

Docker Engine 是業界實際使用的執行時期程式,如果您只執行幾個容器,在 Docker Engine 中管理應用程式相當簡單。但如果您的部署包含數千個容器和數百個服務,在沒有這些專用工具的協助下,幾乎不可能管理該工作流程。

Docker Compose

如果您要在多個容器中的所有位於相同主機上的程序中建置應用程式,您可以使用 Docker Compose 來管理應用程式的架構。Docker Compose 建立 YAML 檔案,指定哪些服務包含在應用程式中,並可使用單一指令來部署及執行容器。使用 Docker Compose,您也可以定義儲存設備的持續磁區、指定基本節點,以及記載和配置服務相依關係。

Kubernetes

若要在更複雜的環境中監視及管理容器生命週期,您需要求助於容器協調工具。雖然 Docker 包括其專屬的協調工具(稱為 Docker Sweile),但大部分開發人員會選擇 Kubernetes

Kubernetes 是一個開放原始碼容器協調平台,源自開發供 Google 內部使用的一個專案。Kubernetes 排程和自動化作業對於管理容器型架構是不可或缺的功能,包括容器部署、更新、服務探索、儲存設備佈建、負載平衡、性能監視等。此外,Kubernetes 工具的開放原始碼生態系統,包括 IstioKnative — 使組織能夠為容器化應用程式部署高生產力的平台即服務 (PaaS),並更快速進入到無伺服器運算

若要深入瞭解 Kubernetes,請查看影片「Kubernetes 介紹 (Kubernetes Explined)」:

Kubernetes 介紹 (10:59)

Docker 與 IBM Cloud

企業容器平台提供跨多個公有雲和私有雲的協調,以統一環境來改善商業績效及營運績效。它是開放式混合雲策略的重要元件,可讓您在任何地方避免供應商綁死、建置及執行工作負載,以及將您的所有 IT 最佳化及現代化

進行下一步:

  • 部署高可用性、完整管理的 Kubernetes 叢集與 Red Hat OpenShift on IBM Cloud,這是受管理的 OpenShift 服務,它利用 IBM Cloud 的企業規模與安全,以自動化更新、規模調整及佈建。
  • 使用 IBM Cloud Satellite(受管理分散式雲端解決方案),在內部部署、邊緣運算和公有雲環境之間部署及執行任何供應商的應用程式。
  • 透過 IBM 混合雲儲存解決方案,無縫部署在內部部署和公有雲環境中支援容器的企業儲存設備,來簡化和合併您的資料湖。
  • 使用 IBM Cloud 受管理服務即可輕易進行複雜的混合 IT 管理。

立即開始使用 IBM Cloud 帳戶