顯示具有 [學習] Linux 標籤的文章。 顯示所有文章
顯示具有 [學習] Linux 標籤的文章。 顯示所有文章

2020年6月5日 星期五

【工業物聯網應用 - 應用服務器的漫談】Docker 的簡介

Docker 這個開源專案最初是 dotCloud 公司內部的業餘專案,基於 Google 公司推出的 Go 語言實作,誕生於 2013 年初。後來此專案加入了 Linux 基金會,遵從 Apache 2.0 協議,原始碼在 GitHub 上進行維護。因為受到廣泛關注與討論,dotCloud 公司後來改名為 Docker Inc。

圖1. Docker 意象圖
Docker 專案的目標是實作輕量級的作業系統虛擬化解決方案,實現跨平台、靈活且可攜式性,現在主流的操作系統包括 Linux 各大發行版本、macOS、Windows 等都已經支持 Docker,各大雲端伺服器供應商也紛紛推出基於Docker 的服務。例如 Google Cloud Platform 與 Google Kubernetes Engine 都支援這種格式;IBM 公司與 Docker 公司達成了戰略合作夥伴關係,進行雲端業務上的深入技術合作;Microsoft 公司在其 Azure 雲平台上支持安全可擴展的 Docker 集群方案;公有雲供應商 Amazon 在 AWS 雲平台上集成了對 Docker 的支持,提供高性能快速的部署。

一、Docker 的基本介紹及版本介紹

 
Docker Engine 是一個客戶端服務器應用程式,主要的組成有:
  1. 服務器 ( Server ) :長期運作的程序,又稱為背景程序 ( daemon process ) 。
  2. REST API :指定程序來與 daemon process 進行對話並指示其操作的接口。
  3. 命令列介面 ( command line interface,CLI ) :客戶端的 docker 命令列。


圖 2. Docker Engine 主要的組成

背景程序創建和管理 Docker 的對象例如,映像檔、容器、網路和儲存裝置。
CLI 使用 Docker REST API 透過 control 或與 Docker 背景程序交互工作,許多其他的 Docker 應用程式都使用基礎 API 和 CLI。 
目前 Docker 支持 Docker Engine、Docker Hub、Docker Cloud 等多種服務。
  1. Docker Engine:包括支持在桌面系統或雲端平台安裝 Docker,以及為企業提供簡單安全彈性的容器集群編排和管理。
  2. Docker Hub:官方提供的雲端託管服務,可以提供公有或私有的 images 倉庫。
  3. Docker Cloud:官方提供的容器雲端服務,可以完成容器的部署與管理,可以完整支持容器話項目,還有 CI、CD 功能。

Docker Engine 具有三種類型的更新渠道 ( update channels ):Stable、Test 以及 Nightly:
  • Stable 提供最新的版本,以提供一般可用性。
  • Test 提供預發布的版本,這些版本可以在正式發布之前進行測試。
  • Nightly 提供了下一個主要版本的最新工作進展。 
更多的資訊可以參考 Docker 的發布渠道。

而 Docker 有兩個版本:
  1. 社區版 ( Community Edition,CE ):非常適合希望開始使用 Docker 並嘗試使用基於容器的應用程序的個人開發和小型團隊。
  2. 企業版 ( Enterprise Edition,EE ):專為企業開發和 IT 團隊而設計,他們在生產中大規模構建,發布和運行業務關鍵型應用程序。
表 1. Docker 版本比較表
功能
社區版
企業版
Docker Enterprise
容器引擎和內置編排,網路,安全性
是
是
是
經過認證的基礎設施,插件和 ISV 容器
是
是
映像檔管理
是
容器應用管理
是
映像檔安全掃描
是

伺服器 ( Server ):
平台
X86_64 / amd 64
ARM
ARM 64 / AARCH 64
IBM Power ( ppc64le )
IBM Z ( s390x )
CentOS
V

V


Debian
V
V
V


Fedora
V

V


Ubuntu
V
V
V
V
V

官方網站上有各種環境下的安裝指南,例如:① Mac OS ② Windows ③ Ubuntu 以及 ④ CentOS 系列的安裝。這裏主要介紹桌面版的 Mac OS 及 Windows 的安裝。

以上的內容簡單的介紹了 Docker,接下來【工業物聯網應用 - 應用服務器的漫談】系列文,之後還有其他精彩內容,其中包含:

  • MacOS Docker 安裝
  • Windows 10 Docker 安裝
  • ……
敬請期待!


文獻參考

2020年2月20日 星期四

【工業物聯網應用 - 應用服務器的漫談】容器技術(Container)應用發展趨勢

在前一篇「淺談虛擬機(VM)與容器技術(Container)」筆者有提到過,在Container的概念尚未開始流行之前,一般而言一個應用程式的執行會是透過虛擬機器(以下簡稱VM)來進行。為什麼不直接執行應用程式呢?因為每台主機的環境配置、作業系統都不盡相同,所以當一台主機要直接執行用另外一台主機開發出來的應用程式,很可能會因為環境不一致的關係而失敗。而VM也有著諸多的缺憾,例如不能把錢(資源)花在刀子口上,因此Container登場了。

一、什麼是容器(Container)

《經濟學家》雜誌曾評價,「如果沒有貨櫃,就不會有全球化。」

MacLane麥克萊恩發現到,降低貨運成本所要求的不僅僅是一個金屬櫃子,而是一整套貨物處理的新方法。這個系統的每個組成部分,港口、輪船、起重機、倉儲設施、貨車、火車以及發貨人自身的作業等等都必須做出改變。海邊碼頭裡的貨櫃是運載貨物用的,是一種按規格標準化的鋼製箱子,貨櫃的特色在於「規格一致,可以層層重疊」,所以可以大量放置在特別設計的遠洋輪船中。有了貨櫃,就可以更加快捷方便的為生產商提供廉價的運輸服務。


圖1. 遠洋輪船的貨櫃運輸示意圖



IT 世界裡借鑒了這個遠洋輪船的貨櫃概念,容器技術是英文單詞Linux Container的直譯,而container有貨櫃、容器的含義。以貨櫃當作主要形象來理解Linux Container的話,會比較清楚。

早期大家認為硬體抽象層基於hypervisor的虛擬化方式可以最大程度上提供虛擬化管理的靈活性,但是每個VM都需要運行一個完整的作業系統以及其中安裝好大量應用程式。隨著時間的推移,對於實際生產開發環境裡,工程師更關注的是自己部署的應用程式,如果每次部署發布都得搞一個完整作業系統和附帶的依賴環境,那麼會讓任務變得很重,性能變得很低下。

基於這種情況,人們就在想,有沒有其他方式能夠讓人更加專注應用程式本身,底層的作業系統和環境我可以共享和複製?換用句話說就是,我部署一個服務運行好後,可以任意移植到另外一個地方,而且不用再安裝一套作業系統和依賴環境。就像貨櫃運載一樣,把貨物一輛跑車(好比開發好的應用APP),打包放到一個容器貨櫃裡,它通過貨輪可以輕而易舉的從上海碼頭(Cent OS 7.2環境)運送到紐約碼頭(Ubuntu 14.04環境)。而且運輸期間,跑車(APP)沒有受到任何損壞(文件沒有丟失),在另外一個碼頭卸貨之後,依然是完美的去賽車(啟動正常)。

Container與VM同樣是將應用程式連同其所需要的環境(相關程式碼、函式庫、環境配置檔)一同打包的技術,但是在Container中不需要安裝作業系統就能執行應用程式。當然也不像VM那樣自己的作業系統自己做,而是在Host OS核心系統層。所有的Container共用Host OS,並建立資源控管機制來配置Host OS上的系統資源,省去執行Guest OS的時間與心力,又同時能做到每個Container互相獨立。

如果說重量級的虛擬化技術就是VM,那麼「容器(Container)」是一種輕量級的虛擬化技術。VM的中心是作業系統,那麼Container的中心就是應用程式。

二、為什麼要使用容器技術(Container)

容器提供一種邏輯封裝機制,能夠將應用程式從實際執行所在環境抽取出來。無論目標環境是私人資料中心、公用雲端還是開發人員的個人筆記型電腦,這種分離的方式都可以輕鬆、一致的部署容器應用程式。容器化提供一種俐落的分工模式,當開發人員專注於應用程式邏輯與依附元件時,IT營運團隊可將注意力集中到部署與管理上,而不用擔心諸如特定軟體版本與應用程式特定設定之類的應用程式細節。


圖2. VM與Docker Container的應用程式服務器架構比較

在前一篇「淺談虛擬機(VM)與容器技術(Container)」筆者有提到過,關於容器技術與虛擬主機性能比較。容器不像VM會將硬體堆疊虛擬化,而是會在作業系統層級進行虛擬化,讓多個容器直接在OS核心之上執行。這表示容器遠比VM輕量,不但共用OS核心、啟動速度快,而且使用的記憶體量也比啟動完整OS要少很多。

表1. 容器技術與虛擬主機性能比較表
功能平台
容器(Container)
虛擬主機
(Virtual Machine)
技術
不需要安裝作業系統
以應用程式為中心
需要安裝作業系統(Guest OS)
以作業系統為中心
開機載入速度
秒為單位
分鐘為單位
須等待作業系統開機時間
硬碟容量
MB 為單位
GB 為單位
相容性
接近原生
受限於虛擬技術支援性
單一主機
同時運行
最高可到數千個
最多可到數十個
隔離性
完全隔離
完全隔離

 
三、容器技術(Container)系統應用發展與雲端運算

目前IaaS層面的主流技術在高可用性(High Availability,HA)、災備、存儲等方面都做得非常成熟。如果容器能夠與一個輕量級或者簡化版的IaaS雲端運算平台相融合,交付應用跑在容器上,容器跑在IaaS的私有雲上,這種硬體、雲端運算平台、容器的三層架構就可以滿足雲端服務的企業應用需求。

而容器應用目前最廣泛的有包括Test/QA應用、Web應用、巨量資料,企業應用等等。以網際網路公司為例:其開發營運維護環境複雜,應用多採用分散式架構,後台使用服務的種類繁多,這些都是容器最擅長解決的問題。根據統計,國內外已有一定數量的網際網路公司將容器整合到公司內部的開發測試流程,並以容器為載體發布應用。容器的可攜性、標準的底層平台介面、跨雲端的API等,能在一定程度上解決企業客戶可能面臨的統一開發流程中各類異構開發環境,並降低開發測試的成本,以容器方式交付的軟體,能為客戶帶來實際的價值。


圖3. 工業革命演進

工業4.0是以智慧製造為主導的第四次工業革命,目標是透過充分利用ICT(資訊、通訊和技術)和CPS(資訊物理系統)等技術推動製造業向智慧化轉型(物聯網/IoT案例),那麼整個IT產業都會為工業4.0作出貢獻,包含雲端運算的容器。





圖4. 未來工廠運作模式

例如:假設一個工廠的系統需要100個小型生產軟體服務支撐,是上100個VM還是100個容器呢?容器可以提供大規模、輕量級、獨立、可伸縮、快速啟動停止的服務能力,似乎更適合智慧工廠。把雲端作業系統(Cloud OS)當作一艘貨輪,每一個在Cloud OS基礎上的應用軟體,都如同一個貨櫃,使用者可以通過標準化手段自由組裝營運環境,同時貨櫃的內容可以由使用者自訂,也可以由專業人員製造,這就是軟體工業4.0模式。

近幾年在雲端虛擬化應用的蓬勃發展之際,以及Docker、Google …… 等國際系統廠商所引領的風潮下,將容器技術的發展以及系統化建構及運用模式推向另一個層次。容器有許多可用格式,也仍持續增溫中,目前最受關注且發展也最積極的有:① Docker ② Kubernetes ③ Mesos。

以上的內容簡單的介紹了應用伺服器的容器技術(Container)及其系統應用和發展,接下來【工業物聯網應用 - 應用服務器的漫談】系列文,即將介紹 Docker 的實踐技術,其中包含:

l   Docker的簡介及安裝
l   Docker的基本操作
l   ……

敬請期待!
文獻參考
網站資源
[1]     Container概念筆記 - 施靜樺- Medium
https://medium.com/@jinghua.shih/container-%E6%A6%82%E5%BF%B5%E7%AD%86%E8%A8%98-b0963ae2d7c6
[2]     十分鐘明白什麼是容器技術 - 每日頭條
https://kknews.cc/zh-tw/code/5noey6l.html
[3]     容器簡介及優點 | Google Cloud
https://cloud.google.com/containers?hl=zh-tw
[4]     容器虛擬化技術發展 - 技術趨勢 - 工研院資訊與通訊研究所
https://ictjournal.itri.org.tw/Content/Messagess/contents.aspx?MmmID=654304432122064271&MSID=711463634525707463
[5]     圖解工業4.0,未來工廠這樣做運作 - 天下雜誌
http://topic.cw.com.tw/2016industry4.0/article.html

電子期刊
[1]     雲報專欄:雲端運算下容器(Container)技術和應用。邱全成。2016 台灣雲報 Cloud News 二月刊。台灣雲端物聯網產業協會。
http://www.twcloud.org.tw/files/file_pool/1/0i235396067708866326/5.pdf
前篇回顧
【工業物聯網應用 - 應用服務器的漫談】淺談虛擬機 ( VM ) 與容器技術 ( Container )