不論是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,還需待微軟揭露更多細節才能得知。