瞭解 Docker
Docker 是開放原始碼專案,將應用程式自動化部署為可攜式且可自足的容器,在雲端或內部部署上執行。 Docker 也是一 家公司 ,可推廣併發展這項技術,並與雲端、Linux 和 Windows 廠商共同作業,包括 Microsoft。
圖 1-2. Docker 將容器部署在混合式雲端的所有圖層
如上圖所示,Docker 容器可以在客戶資料中心、外部服務提供者或 Azure 上的雲端的任何位置、內部部署執行。 Docker 映射容器也可以在 Linux 和 Windows 上原生執行。 不過,Windows 映像只能在 Windows 主機上執行,而 Linux 映像可以在 Linux 主機和 Windows 主機上執行 (目前是使用 Hyper-V Linux VM),其中主機是指伺服器或 VM。
開發人員可以使用 Windows、Linux 或 macOS 上的開發環境。 在開發電腦上,開發人員執行的 Docker 主機是 Docker 映像部署所在,包括應用程式及其相依性。 在 Linux 或 Mac 上工作的開發人員會使用 Linux 型的 Docker 主機,他們只能建立適用於 Linux 容器的映像。 (在 Mac 上工作的開發人員可以編輯程式碼或者從 macOS 執行 Docker 命令列介面 (CLI),但是在撰寫時,不會直接在 macOS 上執行容器。) 在 Windows 上工作的開發人員可以建立適用於 Linux 或 Windows 容器的映像。
若要在開發環境中裝載容器並提供其他開發人員工具,Docker 會提供 適用于 Windows 或 macOS的 Docker Desktop。 這些產品都會安裝必要的 VM (Docker 主機) 以裝載容器。
若要執行 Windows 容器,有兩種執行階段:
Windows Server 容器可透過程序和命名空間隔離技術,提供應用程式隔離功能。 與 Windows Server 容器共用核心的對象為容器主機以及在此主機上執行的所有容器。
Hyper-V 容器可藉由在高度最佳化的虛擬機器中執行每個容器,擴充 Windows Server 容器所提供的隔離能力。 在此組態中,容器主機的核心不會與 Hyper-V 容器共用,以提供更好的隔離。
這些容器映像的建立及運作方式都相同。 不同之處在於從執行 Hyper-V 容器的映像建立容器需要額外參數。 如需詳細資料,請參閱 Hyper-V 容器。
比較 Docker 容器與虛擬機器
圖 1-3 比較了 VM 和 Docker 容器。
圖 1-3. 傳統虛擬機器與 Docker 容器的比較
如上圖所示,針對 VM,主機伺服器中有三個基底層。 從下至下:基礎結構、主機作業系統和 Hypervisor。 除此之外,每個 VM 都有自己的 OS 和所有必要的程式庫。 另一方面,針對 Docker,主機伺服器只有基礎結構和 OS。 除此之外,容器引擎會將容器保持隔離,但可讓他們共用單一基底 OS 的服務。
因為容器只需要很少的資源 (例如,它們不需要完整的作業系統),所以容易部署且會快速啟動。 這可讓您擁有更高的密度,這表示可讓您在相同硬體單位上執行更多服務,藉此降低成本。
作為在相同核心上執行的副作用,和 VM 相比,您會少一些隔離。
映像的主要目標是確保不同部署間均有相同的環境 (相依性)。 這表示您可以在自己的電腦上對它進行偵錯,再將它部署到另一部電腦,保證有相同的環境。
容器映像是一種封裝應用程式或服務,再以可靠且可重現的方式來部署它的方法。 您可以這麼認為:Docker 不只是一項技術,更是哲學與過程。
使用 Docker 時,您不會聽到開發人員說:「它在我的電腦上運作,為什麼不在生產環境中?」他們可以說「它會在 Docker 上執行」,因為封裝的 Docker 應用程式可以在任何支援的 Docker 環境中執行,而且它會在所有部署目標上執行的方式, (例如開發、QA、預備和生產環境) 。
簡單的比喻
也許簡單的比喻可以協助您掌握 Docker 的核心概念。
讓我們暫時回到 1950 年。 當時沒有任何文書處理器,而且到處都在使用影印機 (差不多所有人都在用)。
假設您負責根據需求來快速發送大批信件,並使用信紙和信封,將信件實際投遞到每個客戶的地址 (當時並沒有電子郵件)。
慢慢地,您了解到這些信件的內容是大量段落的組合,只是根據信件目的從中挑選和編排需要的段落,因此您設計一個系統,可以快速地發送信件來提高效率。
系統很簡單:
您開始準備一疊透明紙張,每一張紙都包含一個段落。
若要發送一批信件,您就挑選具有所需段落的紙張,然後將其堆疊並且排列整齊,讓它們整潔易讀。
最後,您將這個組合放入影印機中,然後按下開始以產生所需數量的信件。
因此,工作精簡了,這就是 Docker 的核心概念。
在 Docker 中,每一圖層都是在執行命令之後由檔案系統所產生的一組變更,例如安裝程式。
因此,當您在複製層之後「查看」檔案系統時,會看到檔案整體,包含安裝程式的層。
您可以將映像視為已安裝作業系統的「電腦」中,準備安裝的輔助唯讀硬碟。
同樣地,您可以將容器視為已安裝映像硬碟的「電腦」。 容器就像電腦一樣,可以開啟或關閉。