基於高度虛擬化所誕生的容器技術,現在已經走向大規模應用。那麼容器、虛擬機、Docker、Openstack、Kubernetes 之間又有什麼關係,對如今的選擇有什麼影響呢?html
上世紀 60 年代,計算機是一種稀有商品。即使只租不買,每個月也要花一千多美圓,這使許多企業都沒法承受。並且早期的計算機一般專用於某一項特定的任務,須要同時在許多用戶之間共享計算機資源,而且可能花費幾天甚至幾周的時間才能運行完畢。俗話說:「需求是發明之母」,有了需求人們就會去發明創造來知足需求。計算機的歷史也不例外,過於昂貴的費用和長時間的共享需求刺激了虛擬化的逐漸發展。服務器
基於需求刺激,容器技術應運而生。容器的發展從 Chroot,FreeBSD jails,OpenVZ,LXC,到現在的 Docker、Rocket 真正走向了大規模應用。微信
相比普通服務器,容器是一種更輕量級,更靈活的虛擬化處理方式,它將一個應用程序所需的一切打包在一塊兒。通常狀況下開發人員在編寫代碼時,他們是在本身本地的開發環境中工做;當他們準備將代碼移至生產環境時,總會發生一些意想不到的事情。緣由多種多樣:不一樣的操做系統,不一樣的依賴項,不一樣的庫。網絡
而容器解決了可移植性這一關鍵問題,它能夠將代碼與運行它的環境分開。開發人員能夠將應用程序(包括正確運行所需的全部庫)打包到一個小的容器鏡像中。該鏡像能夠在其餘任何計算機上運行。架構
雖然 Docker 常常會和「容器(Container)」一詞相提並論,可是 Docker 自己並非容器。從字面意思能夠解讀,「Container」原譯爲「集裝箱」,而「Docker」被譯爲「碼頭工人」。框架
Docker 是一個開源的應用容器引擎,是建立容器的工具。讓開發者能夠打包他們的應用和依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器或 Windows 機器上。less
2013 年 PyCon 大會以後,Docker 迅速成爲社區、客戶和更普遍行業的實際標準與基石。Docker 的強大之處在於它經過可移植的形式和易於使用的工具,在應用程序和基礎設施之間創造了獨立性,使得容器技術大衆化,並使容器技術成爲主流。運維
Docker 如此大火,可是咱們須要知道,Docker 並非惟一的,也不是第一個出現的容器平臺。其餘的框架,例如 OpenVZ 和 LXC(Linux Container),於 2000 年中期就已經開始使用。而 FreeBSD jails,則能夠追溯到更遠的年代。Docker 是在 2013 年發佈的,與當今大多數主流的容器技術相比,它是很是年輕的。分佈式
雖然 Docker 不是最成熟的,卻引發了極大的關注。這是由於 Docker 是一個擴展的 Linux 容器(LXC),是一種獨特輕巧、以應用爲中心的虛擬化工具。它大大下降了企業開銷,也更容易讓企業在服務器上部署軟件。且 Docker 容許系統管理員和開發人員在容器中構建任何應用程序,節省資源。模塊化
除此以外,Docker 發展迅猛的緣由還有:
容器和虛擬機這兩種技術常常被互相比較。所謂虛擬機(Virtual Machine)是指經過軟件模擬的具備完整硬件系統功能的、運行在一個徹底隔離環境中的完整計算機系統。
Docker 可能被認爲是當前容器技術的表明,而做爲虛擬機技術的表明,OpenStack 也被大衆所周知。
OpenStack 是一個開源的雲計算管理平臺項目,是一系列軟件開源項目的組合。它不是一個軟件,而是一個雲平臺管理的項目。這個項目由幾個主要的組件組合起來完成一些具體的工做。其中主要包括:
許多人都會經常使用 Docker 和傳統虛擬機來作比較,而且常常凸顯出 Docker 的優點。其實這和 OpenStack 沒有直接關係。曾經許多的性能測試都會將 Docker 與 KVM 進行對比,可是後來發現這些測試是經過 OpenStack 運行的,這代表兩種技術其實能夠很好地協同工做。
那麼若是使用了 Docker,還能使用 OpenStack 嗎?
答案是能夠的,Docker 以最簡單的形式提供了一個容器,用於管理共享基礎架構上的應用程序,同時又使它們彼此隔離。而虛擬機則經過建立一個完整的操做系統來完成相似的工做。OpenStack 的官方文檔(https://wiki.openstack.org/wi...)特別提供了部署 Docker 的解決方案,而且單獨指出:「容器並不是旨在替代虛擬機,它們是互補的,由於它們更適合特定的用例。」
若是第一次看到 Kubernetes 這個詞,可能會比較好奇它爲什麼簡寫爲 K8S。實際上是 k 與 s 中間正好隔了 8 個字母,K8S 爲一種偷懶地寫法。Kubernetes 是 Google 開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。
做爲容器編排的解決方案,隨着 Kubernetes 愈來愈流行,「Kubernetes」 與 「Docker」 這兩個詞也常常會相提並論。
目前,Kubernetes 能夠說是市場領導者,及編排容器和部署分佈式應用程序的標準化方法。Kubernetes 能夠在公共雲服務或本地運行,具備高度模塊化,開放源代碼,而且擁有一個活躍的社區。許多雲廠商也都已經提供了 Kubernetes 做爲服務。
固然了,Docker 和 Kubernetes 並非競爭對手。Docker 是一個容器化平臺,而 Kubernetes 是 Docker 等容器平臺的協調器。它旨在爲容器提供高效地管理,監視應用程序的運行情況,使應用程序提供不間斷地服務,而不須要運維人員去進行復雜的手工配置和處理。
雲計算技術發展至今,從最開始的硬件虛擬化、IaaS、OpenStack、PaaS、容器到現在的 Serverless,雲計算已經愈來愈接近應用邏輯。容器實現了應用的分裝,方便了應用在不一樣環境間的遷移,輕量級的特性又使它可以消耗更少的資源而帶來更大的便利。固然,技術更新迭代迅速,咱們只有不斷學習才能跟上行業的步伐,加油吧,小夥伴們!