9個Q&A讓你快速知道Docker到底是什么
不論是 Google、Amazon、Microsoft、VMware 都紛紛擁戴,加入 Docker 和 Container 所掀起的新時代云端虛擬化行列,這兩項技術成為了 IT 界的新趨勢。Docker 和 Container 到底是什么?以下 9 個Q&A告訴你。
以下為原文:
Q1:Container技術和服務器虛擬化是一樣的技術嗎?
A:不是。兩者雖然都屬于虛擬化的技術,目標都是為了將一套應用程序所需的執行環境打包起來,建立一個孤立環境,方便在不同的硬件中移動,但兩 者的運作思維截然不同。簡單來說,常見的傳統虛擬化技術如 vSphere 或 Hyper-V 是以操作系統為中心,而 Container 技術則是一種以應用程序為中心的虛擬化技術。
傳統虛擬化技術從操作系統層下手,目標是建立一個可以用來執行整套操作系統的沙盒獨立執行環境,習慣以虛擬機(Virtual Machine)來稱呼。而 Container 技術則是直接將一個應用程序所需的相關程序代碼、函式庫、環境配置文件都打包起來建立沙盒執行環境,為了和傳統虛擬化技術產生的虛擬機區 分,Container 技術產生的環境就稱為 Container。
Q2:一般常見的虛擬機和Container有何不同?
A:最明顯的差別是,虛擬機需要安裝操作系統(安裝 Guest OS)才能執行應用程序,而 Container 內不需要安裝操作系統就能執行應用程序。Container 技術不是在 OS 外來建立虛擬環境,而是在 OS 內的核心系統層來打造虛擬執行環境,透過共享 Host OS 的作法,取代一個一個 Guest OS 的功用。Container 也因此被稱為是 OS 層的虛擬化技術。
Q3:為何Container是輕量級虛擬化技術?
A:因為 Container 技術采取共享 Host OS 的作法,而不需在每一個 Container 內執行 Guest OS,因此建立 Container 不需要等待操作系統開機時間,不用 1 分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機來的快。
Q4:Container技術是全新的技術嗎?
A:不是,早在 1982 年,Unix 系統內建的 chroot 機制也是一種 Container 技術。其他如 1998 年的 FreeBSD jails、2005 年出現的 Solaris Zones 和 OpenVZ,或像是 Windows 系統 2004 年就有的 Sandboxie 機制都屬于在操作系統內建立孤立虛擬執行環境的作法,都可稱為是 Container 的技術。
直到 2013 年,dotCloud 這家 PaaS 服務公司開源釋出了一套將 Container 標準化的平臺 Docker,大受歡迎,所以,dotCloud 決定以 Docker 為名成立新公司力推。
Q5:Docker如何實現Container標準化?
A:Docker 采用了 aufs 文件系統來設計一個可以層層堆棧的 Container 映象文件,將 Container 內的所有程序(包括應用程序、相關函式庫、配置文件),都打包進 Docker 映象檔,并且提供了一個 Dockerfile 配置文件來記錄建立 Container 過程的每一個步驟包括參數。只要在任何支持 Docker 平臺的環境中,就可以從這個映象檔來建立出一個一模一樣的 Container 來執行同一個應用程序。如此一來,應用程序等于是可以透過 Docker 映象檔,或甚至只需要 Dockerfile,就能將程序執行環境帶著走,移動到任何支持 Docker 的環境中。Docker 公司也釋出 API,可以用來控制所有的 Container 相關指令,任何人只要使用同一套 Docker,就等于有了同一套管理和建立 Container 的方法,也就等同于將 Container 運用標準化了。
Q6:一個Container映象檔內可以安裝多少應用程序?
A:一個 Container 的映象檔內可以安裝多支程序,例如同時安裝 Ubuntu、Apache、MySQL、Node.js、Ruby 等。不過,Docker 官方建議,一只程序安裝在一個 Container 內,再把這些 Container 迭起來提供一個完整的服務。
Docker 稱這是一種 Microservices(微服務)的新軟件架構,將組成一個應用系統的每一個 Stack,拆解成許多小型服務,例如 Apache 服務、MySQL 服務、Node.js 服務、Ruby 服務,每一個服務都是包在 Container 里的一只程序,例如 MySQL 服務就是部署在 Container 內的 MySQL。
這么做的好處是可以建立一個松散耦合的彈性應用程序架構,也能輕易地抽換其中一個 Container,例如要升級 MySQL,只需要重載新版 MySQL 的 Container 映象文件,就可以完成數據庫升級,不用將整套應用系統停機。
Q7:Container內不是不需要OS,為何需要OS的基礎映象檔?
A:OS 基礎映象檔的用途是讓 Container 擁有這 OS 的文件系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
Q8:Docker對Devops有何幫助?
A:因為 Docker 透過 Dockerfile 來記錄建立 Container 映象文件的每一個步驟,可以將建立應用程序執行環境的過程和配置參數,完整地記錄下來。開發人員和維運人員之間可以利用 Dockerfile 來溝通對執行環境的討論。甚至結合版本控制服務如 GitHub,可以讓 Dockerfile 具備版本控制功能,能將基礎架構程序化(Infrastructure as code)來管理。
Q9:可以在Windows Server環境中執行Docker嗎?
A:還不行。目前 Docker 只能在 Linux 平臺上執行,但是微軟 10 月中剛宣布要在下一波 Windows Server 改版時內建 Docker 引擎,未來同一份 Docker 映象檔能否跨 Linux 和 Windows OS,還需待微軟揭露更多細節才能得知。
<span id="shareA4" class="fl">
</span> </div>