什麼是 Docker?

Docker 是一個用於開發、交付和執行應用程式的開放平台。Docker 讓您可以將應用程式與基礎架構分開,以便快速交付軟體。使用 Docker,您可以像管理應用程式一樣管理基礎架構。透過利用 Docker 的程式碼交付、測試和部署方法,您可以顯著減少從編寫程式碼到在生產環境中執行之間的延遲。

Docker 平台

Docker 提供了在一個稱為容器 (container) 的鬆散隔離環境中封裝和執行應用程式的能力。這種隔離與安全性讓您可以在給定的主機上同時執行許多容器。容器非常輕量,並且包含執行應用程式所需的一切,因此您不必依賴主機上已安裝的內容。您可以在工作時共享容器,並確保與您共享的每個人都能獲得以相同方式運作的相同容器。

Docker 提供了管理容器生命週期的工具與平台

  • 使用容器開發您的應用程式及其支援元件。
  • 容器成為發佈和測試應用程式的單元。
  • 當準備就緒後,將您的應用程式部署到生產環境中,可以是容器形式或編排服務形式。無論您的生產環境是本地資料中心、雲端供應商還是兩者的混合,運作方式皆相同。

Docker 可以用來做什麼?

快速且一致地交付應用程式

Docker 簡化了開發生命週期,讓開發人員能夠在標準化環境中使用提供應用程式和服務的本地容器來進行工作。容器非常適合持續整合與持續交付 (CI/CD) 工作流程。

請考慮以下範例情境

  • 您的開發人員在本地編寫程式碼,並使用 Docker 容器與同事共享他們的工作成果。
  • 他們使用 Docker 將應用程式推送到測試環境,並執行自動化與手動測試。
  • 當開發人員發現錯誤時,他們可以在開發環境中修復它們,並重新部署到測試環境進行測試與驗證。
  • 當測試完成後,將修復程式交付給客戶就像將更新後的映像檔推送到生產環境一樣簡單。

靈活的部署與擴展

Docker 基於容器的平台允許高度可移植的工作負載。Docker 容器可以在開發人員的本地筆記型電腦、資料中心的實體或虛擬機、雲端供應商,或混合環境中執行。

Docker 的可移植性和輕量級特性也使得動態管理工作負載變得容易,可以根據業務需求近乎即時地擴展或縮減應用程式和服務。

在相同硬體上執行更多工作負載

Docker 輕量且快速。它是基於 Hypervisor 的虛擬機的可行且具成本效益的替代方案,因此您可以利用更多的伺服器容量來實現業務目標。Docker 非常適合高密度環境,以及需要以較少資源完成更多工作的中小型部署。

Docker 架構

Docker 使用用戶端-伺服器架構。Docker 用戶端與 Docker daemon 通訊,由後者負責建立、執行和分發 Docker 容器的繁重工作。Docker 用戶端和 daemon 可以執行在同一系統上,或者您可以將 Docker 用戶端連接到遠端的 Docker daemon。Docker 用戶端和 daemon 使用 REST API,透過 UNIX socket 或網路介面進行通訊。另一個 Docker 用戶端是 Docker Compose,它讓您能夠處理由一組容器組成的應用程式。

Docker Architecture diagram

Docker daemon (守護程序)

Docker daemon (dockerd) 監聽 Docker API 請求,並管理 Docker 物件,例如映像檔 (images)、容器 (containers)、網路 (networks) 和儲存卷 (volumes)。daemon 也可以與其他 daemon 通訊以管理 Docker 服務。

Docker 用戶端

Docker 用戶端 (docker) 是許多 Docker 使用者與 Docker 互動的主要方式。當您使用諸如 docker run 之類的指令時,用戶端會將這些指令傳送給 dockerd,由其執行。docker 指令使用 Docker API。Docker 用戶端可以與多個 daemon 通訊。

Docker Desktop

Docker Desktop 是一款易於安裝的應用程式,適用於您的 Mac、Windows 或 Linux 環境,使您能夠構建和共享容器化應用程式與微服務。Docker Desktop 包含 Docker daemon (dockerd)、Docker 用戶端 (docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。如需更多資訊,請參閱 Docker Desktop

Docker 登錄檔 (Registries)

Docker 登錄檔 (registry) 儲存 Docker 映像檔。Docker Hub 是一個任何人都可以使用的公共登錄檔,Docker 預設會在 Docker Hub 上尋找映像檔。您甚至可以執行自己的私有登錄檔。

當您使用 docker pulldocker run 指令時,Docker 會從您配置的登錄檔中提取所需的映像檔。當您使用 docker push 指令時,Docker 會將您的映像檔推送到您配置的登錄檔。

Docker 物件

當您使用 Docker 時,您正在建立和使用映像檔、容器、網路、儲存卷、外掛程式和其他物件。本節簡要概述了其中一些物件。

映像

映像檔 (Image) 是一個唯讀模板,包含建立 Docker 容器的說明。通常,映像檔是基於另一個映像檔,並帶有一些額外的自訂配置。例如,您可能會建立一個基於 ubuntu 映像檔的映像檔,但安裝了 Apache Web 伺服器和您的應用程式,以及使您的應用程式執行所需的配置詳細資料。

您可以建立自己的映像檔,也可以只使用他人建立並發佈在登錄檔中的映像檔。要建立自己的映像檔,您可以建立一個 Dockerfile,使用簡單的語法定義建立和執行映像檔所需的步驟。Dockerfile 中的每條指令都會在映像檔中建立一個層 (layer)。當您變更 Dockerfile 並重新構建映像檔時,只有變更過的層會被重新構建。與其他虛擬化技術相比,這正是使映像檔如此輕量、小巧且快速的部分原因。

容器

容器 (Container) 是映像檔的可執行實例。您可以使用 Docker API 或 CLI 建立、啟動、停止、移動或刪除容器。您可以將容器連接到一個或多個網路,為其附加儲存空間,甚至根據其目前狀態建立一個新映像檔。

預設情況下,容器與其他容器及其主機相對隔離。您可以控制容器的網路、儲存或其他底層子系統與其他容器或主機之間的隔離程度。

容器由其映像檔以及您在建立或啟動時提供的任何配置選項定義。當移除容器時,任何未儲存在持久性儲存中的狀態變更都會消失。

範例 docker run 指令

以下指令執行一個 ubuntu 容器,以互動方式附加到您的本地命令列工作階段,並執行 /bin/bash

$ docker run -i -t ubuntu /bin/bash

當您執行此指令時,會發生以下情況(假設您使用的是預設的登錄檔配置)

  1. 如果您本地沒有 ubuntu 映像檔,Docker 會從您配置的登錄檔中提取它,就像您手動執行了 docker pull ubuntu 一樣。

  2. Docker 會建立一個新容器,就像您手動執行了 docker container create 指令一樣。

  3. Docker 會為容器分配一個讀寫檔案系統,作為其最後一層。這允許執行中的容器在其本地檔案系統中建立或修改檔案和目錄。

  4. Docker 會建立一個網路介面將容器連接到預設網路,因為您沒有指定任何網路選項。這包括為容器分配 IP 位址。預設情況下,容器可以使用主機的網路連線連接到外部網路。

  5. Docker 會啟動容器並執行 /bin/bash。由於容器是以互動方式執行並連接到您的終端機(歸功於 -i-t 旗標),您可以使用鍵盤輸入,而 Docker 會將輸出記錄到您的終端機。

  6. 當您執行 exit 來終止 /bin/bash 指令時,容器會停止但不會被移除。您可以再次啟動它或將其移除。

底層技術

Docker 是用 Go 程式語言編寫的,並利用 Linux 核心的多項功能來提供其功能。Docker 使用一項稱為 namespaces (命名空間) 的技術來提供稱為容器的隔離工作區。當您執行容器時,Docker 會為該容器建立一組命名空間。

這些命名空間提供了一層隔離。容器的每個方面都在單獨的命名空間中執行,其存取權限僅限於該命名空間。

下一步

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.