什麼是 Docker?
Docker 是一個 開放原始碼專案,,可將應用程式部署自動化為可攜式、自足的容器,可在雲端或內部部署上執行。 Docker 也是 公司,可促進及發展這項技術,並與雲端、Linux 和 Windows 廠商共同作業,包括Microsoft。
圖 2-2。 Docker 會在混合式雲端的所有層級部署容器。
Docker 容器可以在客戶數據中心、外部服務提供者或雲端、Azure 上的任何位置執行。 Docker 映像容器可以在 Linux 和 Windows 上原生執行。 不過,Windows 映射只能在 Windows 主機上執行,Linux 映射只能在 Linux 主機和 Windows 主機上執行(到目前為止,使用 Hyper-V Linux VM),其中主機表示伺服器或 VM。
開發人員可以在 Windows、Linux 或 macOS 上使用開發環境。 在開發電腦上,開發人員會執行 Docker 主機來部署 Docker 映像,包括應用程式及其依賴項。 在Linux上或macOS上工作的開發人員會使用以Linux為基礎的Docker主機,而且只能建立Linux容器的映像。 (在macOS上工作的開發人員可以從macOS編輯程式代碼或執行Docker CLI,但截至撰寫本文時,容器不會直接在macOS上執行。在 Windows 上工作的開發人員可以建立 Linux 或 Windows 容器的映像。
若要在開發環境中裝載容器並提供其他開發人員工具,Docker 會提供 Docker Desktop for Windows 或 macOS。 這些產品會安裝必要的 VM(Docker 主機)來裝載容器。
若要執行 Windows 容器,有兩種類型的運行時間:
Windows Server 容器透過進程和命名空間隔離技術提供應用程式隔離。 Windows Server 容器會與容器主機和主機上執行的所有容器共用核心。
Hyper-V 容器會藉由在高度優化的虛擬機中執行每個容器,來擴充 Windows Server 容器所提供的隔離。 在此設定中,容器主機的核心不會與 Hyper-V 容器共用,以提供更佳的隔離。
這些容器的映像會以相同的方式建立,且運作方式相同。 差異在於從執行 Hyper-V Container 的映像建立容器的方式需要額外的參數。 如需詳細資訊,請參閱 Hyper-V 容器。
比較 Docker 容器與虛擬機
圖 2-3 顯示 VM 與 Docker 容器之間的比較。
虛擬機 | Docker 容器 |
---|---|
虛擬機包括應用程式、必要的連結庫或二進位檔,以及完整的客體操作系統。 完整虛擬化需要比容器化更多的資源。 | 容器包含應用程式及其所有相依性。 不過,它們與其他容器共用操作系統核心,在主機操作系統的用戶空間中以隔離進程的形式執行。 除了在 Hyper-V 容器中,每個容器在各自特殊的虛擬機內執行。) |
圖 2-3。 傳統虛擬機與 Docker 容器的比較
針對 VM,主機伺服器中有三個基底層,從上到下:基礎結構、主機操作系統和 Hypervisor,以及每個 VM 都有自己的 OS 和所有必要的連結庫。 針對 Docker,主機伺服器只有基礎架構和作業系統,之上運行著容器引擎,以保持容器的隔離性,同時共用基礎的作業系統服務。
因為容器需要較少的資源(例如,它們不需要完整的OS),所以很容易部署,而且可以快速啟動。 這可讓您擁有較高的密度,這表示它可讓您在同一個硬體單位上執行更多服務,進而降低成本。
由於在相同核心上執行,您得到的隔離比虛擬機少。
映射的主要目標是讓環境(相依性)在不同的部署中相同。 這表示您可以在計算機上進行偵錯,然後將它部署至保證相同環境的另一部計算機。
容器映像是封裝應用程式或服務,並以可靠且可重現的方式部署它的方法。 您可以說 Docker 不僅是一種技術,而且是一種哲學和一個程式。
使用 Docker 時,您不會聽到開發人員說:「它在我的電腦上運作,為什麼不在生產環境中?他們可以簡單地說,「它會在 Docker 上執行」,因為封裝的 Docker 應用程式可以在任何支援的 Docker 環境中執行,而且它會在所有部署目標上執行的方式(例如開發、QA、預備和生產環境)。
簡單的比喻
也許簡單的類比有助於掌握 Docker 的核心概念。
讓我們回到 20 世紀 50 年代一段時間。 沒有文字處理器,影印機到處使用(某種程度上)。
假設您負責視需要快速發出批次的信件,使用真正的紙張和信封將信件寄給客戶,以便實際傳遞到每個客戶的位址(當時沒有電子郵件)。
在某些時候,你意識到信件只是一組由大量段落組成的文本,它們根據信件的目的被選擇和安排。於是你設計了一個系統來快速發出信件,期望獲得可觀的加薪。
系統很簡單:
您會從一組包含每個段落的透明工作表開始。
若要寄出一輯信件,您可以挑選具有所需段落的頁面,然後堆疊並對齊它們,使其看起來整齊並易於閱讀。
最後,您將這組文件放入影印機中,然後按下開始以製作需要的信件數量。
因此,簡化,這就是 Docker 的核心概念。
在 Docker 中,每一層都是執行命令之後文件系統所產生變更集,例如安裝程式。
因此,當您在複製圖層之後「查看」文件系統時,您會看到安裝程式時包含在圖層中的所有檔案。
您可以將映像視為已安裝作業系統的「電腦」中準備安裝的輔助唯讀硬碟。
同樣地,您可以將容器視為已安裝映像硬碟的「計算機」。 容器就像計算機一樣,可以開啟或關閉。