Docker 從 Linux 容器的演變
介紹
Docker 是一款強大的工具,允許開發者輕鬆構建、部署和執行容器化應用程式。容器是一種輕量級且可移植的虛擬化形式,它將應用程式及其依賴項打包在一起,使其易於在不同的環境之間移動。Docker 的演變始於 Linux 容器 (LXC),並且從那時起徹底改變了我們對軟體開發和分發的思考方式。在本文中,我們將探討 Docker 從 Linux 容器的演變、使用容器的好處以及 Docker 如何增強 LXC 的概念。
什麼是容器?
容器是一種邏輯打包機制,它將應用程式從執行它們的執行環境中提取出來。這種抽象的好處包括能夠輕鬆地在任何環境中一致地部署應用程式。開發者可以在本地桌面上構建應用程式,將其容器化,並安全地將其部署到公共雲中。虛擬機器和容器都虛擬化對底層硬體的訪問,例如CPU、記憶體、儲存和網路。但是,與容器相比,虛擬機器的建立和維護成本更高,需要執行多個作業系統的副本。
Docker 從 Linux 容器的演變
Docker 首次釋出於 2013 年,但其根源可以追溯到 2008 年首次推出的 Linux 容器 (LXC)。LXC 是 Linux 核心容器化功能(例如名稱空間和“cgroups”)的使用者空間介面。它允許在單個主機上執行多個隔離的 Linux 系統或容器,共享主機的核心。Docker 在 LXC 的概念上進行了構建,並建立了一個新的平臺來開發、交付和執行容器化應用程式。Docker 和 LXC 之間的一個主要區別在於,Docker 使用分層檔案系統(稱為UnionFS),允許多個容器共享相同的底層映象。這使得 Docker 比傳統的虛擬化更有效率和輕量級。
Docker 還引入了容器映象的概念,容器映象是應用程式及其依賴項的預構建、預配置映象。這些映象可以輕鬆地在不同的團隊和環境之間共享和重用,從而更容易一致且可靠地部署應用程式。Docker 還添加了用於管理容器的命令列介面(CLI) 和REST API,使開發者更容易將 Docker 整合到他們的工作流程中。此外,Docker 還引入了一個用於共享和發現映象的集中式中心,稱為Docker Hub,這使得開發者更容易找到和使用影像。
瞭解 Linux 容器
Linux 容器,通常稱為 LXC,可能是第一個完整的容器管理器的實現。它是作業系統級別的虛擬化,提供了一種機制,用於限制和優先分配多個應用程式的資源,例如 CPU 和記憶體。它還允許完全隔離應用程式的程序樹、網路和檔案系統。所有程序共享相同的核心空間,這使得容器與虛擬機器相比非常輕量級。
Docker 的到來
雖然LXC 提供了一個整潔且強大的使用者空間介面,但它還不夠使用者友好,也沒有產生大規模的吸引力。Docker 透過抽象處理核心函式的大部分複雜性,並提供一個簡單的格式來容器化應用程式及其依賴項,從而改變了遊戲規則。它還支援自動建立、版本控制和重用容器。Docker 與不同 LXC 版本和發行版的副作用隔離。
Docker 相對於 LXC 的優勢
Docker 提供作業系統級別的虛擬化來進行沙盒化,就像 LXC 一樣。但是,Docker 提供了比 LXC 更多的優勢,例如更簡單易用的介面、對自動容器建立和版本控制的支援,以及用於共享和發現映象的集中式中心。此外,Docker 具有模組化架構,它依賴於關鍵元件,例如 Docker 守護程式(dockerd)、containerd 和runc 來提供其服務。這種架構允許核心元件獨立發展和標準化。
Docker 工作流程
典型的 Docker 工作流程包括將應用程式打包為映象,將其釋出到登錄檔,並將其作為容器執行,可能還會持久化。Docker 的命令列介面和REST API 使將此工作流程整合到您的開發過程中變得很容易。
Docker 命令
要開始使用 Docker,您首先需要在您的系統上安裝它。安裝 Docker 後,您可以開始使用它來執行容器。以下命令將執行一個簡單的“Hello, World”容器:
要列出所有正在執行的容器,請使用以下命令:
$ docker ps
要停止正在執行的容器,請使用以下命令:
$ docker stop <CONTAINER ID>
Docker 架構
Docker 具有模組化架構,它依賴於關鍵元件,例如 Docker 守護程式(dockerd)、containerd 和 runc 來提供其服務。這種架構允許核心元件獨立發展和標準化。Docker 守護程式(dockerd) 是 Docker 的核心,包括偵聽 API 請求並管理 Docker 物件的 Docker 守護程式。它還提供 API 介面和命令列介面來與 Docker 守護程式進行互動。containerd 是另一個服務守護程式,它有助於執行下載映象並將其作為容器執行等任務。它遵循客戶端(如dockerd)可以連線到的標準 API。Runc 是與核心功能互動並提供建立名稱空間和控制組的標準機制的元件。它是 libcontainer 的重新打包,以符合OCI 規範。本節將介紹 Docker 的核心元件及其在架構中的作用。
結論
Docker 自從作為 Linux 容器的容器誕生以來已經走了很長一段路。它已成為容器化的實際標準,並且極大地簡化了開發、部署和執行應用程式的過程。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP