前陣子參加了學校給新生網站的開發案,當時組長為了解決開發環境在各台電腦皆有些微不同的問題,使用到 Docker 作為開發環境和實際部署 CI/CD 的工具,但由於當時(現在也還是)是一個新手還不懂這隻叫做 Docker 的鯨魚是什麼,因此鐵人賽就選擇了 Docker 作為主題,一部分作為筆記記錄自己的學習歷程,一部分也逼迫自己好好把它學好 XD。
本文將會著重介紹對應到 CNCF Trail Map 中容器 (Container) 在 Docker 的部分,也會稍微帶到持續交付部署 CI/CD、和 K8s(kubernetes),先簡單分成五個大單元:
Docker,原本是 dotCloud 這間 PaaS (平台即服務)公司的內部專案,後來於 2013 年 Open Source,成為今日廣為使用的專案之一
Docker 為一 OS 等級虛擬化的產品,和虛擬機器 VM(Virtual Machine) 類似,但不同點在於VM是從硬體層以上就進行了虛擬化,因此包含 OS、Binarys\Library 和 app 本身有幾個服務在跑就會有幾套在跑,資源也因此會被 OS 和 App 瓜分,Image 也較大,啟動速度也較慢;Docker 則是以 Docker 環境作為作業系統,依賴 Host OS 的 Kernel 啟動以應用程式為單位的服務,好處是需要的資源較少,相應性資源也都被封裝在容器當中,因此啟動、重啟速度較快,也比較不會發生在VM中因版本不合的衝突問題。