2017年12月5日 星期二

10個Q&A快速認識Docker

 Source: https://www.ithome.com.tw/news/91847

Docker和虛擬化技術有何不同?Container和虛擬機器有什麼不同?10個問答讓你快速認識什麼是Docker

不論是Google、Amazon、微軟、VMware都紛紛擁戴,加入Docker和Container所掀起的新世代雲端虛擬化行列,這2項技術成為了IT界的新顯學。Docker和Container到底是什麼?以下10個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,還需待微軟揭露更多細節才能得知。
Q10:在臺灣,如何找到懂Docker技術的人?
A:目前Docker公司還未在臺設點,但有一個Docker Taipei社群,成員截至10月有383人。
Docker Taipei也預計配合Docker總公司舉辦的全球HackDay活動,在11月1日舉辦臺北場HackDay。參加作品將直接發布到美國和全球Docker開發者一起評比,獎品是明年到美國參加Docker技術大會的資格。

沒有留言: