啟迪雲 | 王中傑
有無數的文章都在討論和比較Docker、Kubernetes 以及Mesos。如果你是初學者,那麼你可能會認為這三個開源項目正為了稱霸容器界而殊死搏鬥。
雖然這三種技術都使得使用容器部署、管理和伸縮應用成為可能,但實際上它們各自解決了不同的問題,並且根植於迥異的上下文環境中。事實上,這三種被廣泛採用的工具鏈,都是有差別的。
讓我們來對三個項目的原始任務、技術架構,以及它們是如何相互補充和交互的來進行對比。
Docker
Docker 公司-始於名為dotCloud 的平臺即服務(PaaS)供應商。dotCloud 團隊發現,在許多應用和客戶之間管理依賴和二進位文件時需要付出大量的工作。因此他們將Linux 的cgroups和namespace 的一些功能合併成一個單一且易於使用的軟體包,以便於應用程序可以一致地運行在任何基礎設施上。這個軟體包就是所謂的Docker 鏡像,它提供瞭如下的功能:
· 將應用程序和依賴庫封裝在一個軟體包(即Docker 鏡像)中,因此應用可以被一致地部署在各個環境上;
· 提供類似Git 的語義,例如 docker push,docker commit 等命令讓應用開發者可以快速接受這門新的技術,並將其融入到現有的工作流中;
· 定義Docker 鏡像為不可變的層,支持不可變的基礎設施。新提交的變更被分別保存為只讀層,讓復用鏡像和追蹤變更記錄變得十分簡單。還通過只傳輸更新而不是整個鏡像來節省磁碟空間和網路流量;
· 通過實例化不可變的鏡像和讀寫層來運行Docker 容器,讀寫層可以臨時地存儲運行時變更,從而輕鬆部署和擴展應用程序的多個實例。
Docker 變得越來越受歡迎,開發者們開始從在筆記本電腦上運行容器轉而在生產環境中運行容器。跨多個機器之間協調這些容器需要額外的工具,這稱之為」容器編排」。第一個支持Docker 鏡像的容器編排工具是Apache Mesos 的marathon。那年,Docker 的創始人兼首席技術官Solomon Hykes 將Mesos 推薦為」生產集羣的黃金標準「。不久之後,除了Mesos 的Marathon 之外,還出現了許多的容器編排技術:Nomad、Kubernets,Docker Swarm 。
隨著Docker 開始商業化其開源的文件格式,該公司還開始引入工具來完善其核心的Docker 文件格式和運行時引擎,包括:
· 為公開存儲Docker 鏡像的而生的Docker hub;
· 存儲私有鏡像的Docker 倉庫(Docker registry);
· Docker cloud,用於構建和運行容器的管理性服務;
· Docker數據中心作為一種商業產品體現了許多Docker 技術;