輕量級虛擬化技術. 什麼是 Docker?
什麼是 Docker?
Docker 是一種雲端軟體平台,可讓您快速地建立、測試和部署應用程式。Docker 將軟體封裝到名為容器的標準化單位,其中包含程式庫、系統工具、程式碼和執行時間等執行軟體所需的所有項目。使用 Docker,您可以將應用程式快速地部署到各種環境並加以擴展,而且知道程式碼可以執行。
Docker 是開放原始碼專案,將應用程式自動化部署為可攜式且可自足的容器,在雲端或內部部署上執行。 Docker 也是升級及發展這項技術的公司。 Docker 與雲端、Linux 和 Windows 廠商共同作業,包括 Microsoft。
圖 2-2。 Docker 將容器部署在混合式雲端的所有圖層
Docker 映像容器以原生方式在 Linux 及 Windows 上執行。 Windows 映像只在 Windows 主機上執行,Linux 映像只在 Linux 主機上執行。 主機是伺服器或 VM。
您可以在 Windows、Linux 或 macOS 上開發。 開發電腦執行的 Docker 主機是 Docker 映像部署所在,包括應用程式及其相依性。 在 Linux 或 macOS,您要使用 Linux 架構的 Docker 主機,只能建立用於 Linux 容器的映像。(您可以在 macOS 上編輯程式碼或執行 Docker CLI,但截至撰稿時,容器仍不能直接在 macOS 上執行。)您可以在 Windows 上建立適用於 Linux 或 Windows 容器的映像。
在 Windows 或 macOS 上,Docker Community Edition (CE) 裝載部署環境中的容器,並提供其他開發人員工具。 建置、出貨及執行大型業務關鍵應用程式的 IT 小組使用 Docker Enterprise Edition (EE)。 ~這兩項產品都會安裝必要的 VM (Docker 主機) 以裝載容器。~
Docker是什麼?容器又是什麼?
Docker剛推出標榜是輕量級的虛擬化技術,屬於作業系統層虛擬化(Operating System–Level Virtualization),建構在Linux內核包含的Linux Container(LXC)技術之上,直到0.9版之後,推出了libcontainer(之後改名為runC,https://runc.io/),便抽離了底層容器技術的相依性,因此2016年微軟推出Windows Container便直接相容Docker操作指令和API。
當然,容器技術並不是Docker公司憑空想像,如圖1所示,從1979年的Unix V7、2005年的OpenVZ,以及2008年LXC,甚至是2013年Google推出的容器技術Let Me Contain That For You(LMCTFY,https://github.com/google/lmctfy),皆不斷改進技術並貼近使用者,正因前面提到,Docker憑借友善直觀的指令和使用者提供豐富大量的Docker映像檔確立了本身在容器技術的主流市場。
當然,容器技術並不是Docker公司憑空想像,如圖1所示,從1979年的Unix V7、2005年的OpenVZ,以及2008年LXC,甚至是2013年Google推出的容器技術Let Me Contain That For You(LMCTFY,https://github.com/google/lmctfy),皆不斷改進技術並貼近使用者,正因前面提到,Docker憑借友善直觀的指令和使用者提供豐富大量的Docker映像檔確立了本身在容器技術的主流市場。
▲圖1 容器的歷史。(資料來源:www.plesk.com) |
Docker容器跟VM虛擬機有何不同?
正因為初期定位為輕量級虛擬化,所以很多人誤解容器技術的使用方式,其實跟虛擬化技術所要解決的問題是南轅北轍。
傳統虛擬化技術是從模擬虛擬硬體下手,主要目標是建立一個完全獨立的沙箱式作業系統執行環境,單位是一整台虛擬機(Virtual Machine),所產生出的執行單位稱作實例(instance)。
而容器技術則純粹只是將應用系統相關的程式碼、函式庫、執行環境配置打包成隔離的可執行沙箱環境,並沒有做任何硬體虛擬化,正因為少了虛擬化的客體作業系統(Guest OS)這一層,所以執行應用系統效率會比虛擬化要好。但容器化技術並不會幫作業系統或硬體加速,單純只是資源利用率比較高。
正因為初期定位為輕量級虛擬化,所以很多人誤解容器技術的使用方式,其實跟虛擬化技術所要解決的問題是南轅北轍。
傳統虛擬化技術是從模擬虛擬硬體下手,主要目標是建立一個完全獨立的沙箱式作業系統執行環境,單位是一整台虛擬機(Virtual Machine),所產生出的執行單位稱作實例(instance)。
而容器技術則純粹只是將應用系統相關的程式碼、函式庫、執行環境配置打包成隔離的可執行沙箱環境,並沒有做任何硬體虛擬化,正因為少了虛擬化的客體作業系統(Guest OS)這一層,所以執行應用系統效率會比虛擬化要好。但容器化技術並不會幫作業系統或硬體加速,單純只是資源利用率比較高。
比較 Docker 容器與虛擬機器
圖 2-3 比較 VM 和 Docker 容器。
虛擬機器 Docker 容器
虛擬機器包含應用程式、必要的程式庫或二進位檔,以及完整的客體作業系統。完整的虛擬化比容器化需要更多資源。 容器包括應用程式及其所有相依性。 不過,容器會與其他容器共用作業系統核心。 容器在主機作業系統上當作使用者空間的隔離處理序執行。 Hyper-V 容器除外,因為每個容器都是在每個容器的特殊虛擬機器內部執行。
圖 2-3。 傳統虛擬機器與 Docker 容器的比較
因為容器只需要很少的資源 (例如,它們不需要完整的作業系統),所以可快速輕易地部署。 低資源使用率造就更高的密度。 您可以在相同的硬體單元上執行更多服務,並降低成本。
在相同的核心上執行,隔離會比 VM 所提供的少。
映像的主要目標是跨不同的部署建立相同的環境 (相依性)。 這表示您可以在自己的電腦上對它進行偵錯,再將它部署到另一部電腦,保證有相同的環境。
容器映像是一種封裝應用程式或服務,再以可靠且可重現的方式來部署它的方法。 您可以這麼認為:Docker 不只是一項技術,更是哲學與過程。
Docker 開發人員不會說:「電腦上行得通,為什麼生產環境行不通?」 他們會說:「Docker 上可以執行。」 Docker 封裝的應用程式可以在任何受支援的 Docker 環境中執行。 Docker 封裝的應用程式在所有部署目標 (開發、品管、暫存、生產環境) 中都能以一致的方式執行。
Docker 的運作方式
Docker 透過提供執行程式碼的標準方法進行運作。Docker 是容器的作業系統。與虛擬機器虛擬化 (免除直接管理的需要) 伺服器硬體的方法相似,容器可虛擬化伺服器的作業系統。Docker 安裝在每部伺服器上,並提供簡單的命令讓您使用以建立、啟動或停止容器。
使用 Docker 的原因
使用 Docker 可快速交付程式碼、標準化應用程式操作、無縫移動程式碼,以及透過提高資源使用率節省成本。您可以使用 Docker 獲得能夠隨處可靠執行的單一物件。Docker 簡單易懂的語法還能為您提供完整的控制權。廣泛採用代表有穩固的工具和立即可用應用程式生態系統隨時可供 Docker 使用。
留言
張貼留言