深入了解什么是Docker
基于高度虛擬化所誕生的容器技術,如今已經走向大規模應用。那么容器、虛擬機、Docker、Openstack、Kubernetes 之間又有什么關系,對現在的選擇有什么影響呢?
上世紀 60 年代,計算機是一種稀有商品。即便只租不買,每月也要花一千多美元,這使許多企業都無法承受。而且早期的計算機通常專用于某一項特定的任務,需要同時在許多用戶之間共享計算機資源,并且可能花費幾天甚至幾周的時間才能運行完畢。俗話說:“需求是發明之母”,有了需求人們就會去發明創造來滿足需求。計算機的歷史也不例外,過于昂貴的費用和長時間的共享需求刺激了虛擬化的逐漸發展。
Docker 與容器
基于需求刺激,容器技術應運而生。容器的發展從 Chroot,FreeBSD jails,OpenVZ,LXC,到如今的 Docker、Rocket 真正走向了大規模應用。
相比普通服務器,容器是一種更輕量級,更靈活的虛擬化處理方式,它將一個應用程序所需的一切打包在一起。一般情況下開發人員在編寫代碼時,他們是在自己本地的開發環境中工作;當他們準備將代碼移至生產環境時,總會發生一些意想不到的事情。原因多種多樣:不同的操作系統,不同的依賴項,不同的庫。
而容器解決了可移植性這一關鍵問題,它可以將代碼與運行它的環境分開。開發人員可以將應用程序(包括正確運行所需的所有庫)打包到一個小的容器鏡像中。該鏡像可以在其他任何計算機上運行。
Docker 的興起
雖然 Docker 經常會和“容器(Container)”一詞相提并論,但是 Docker 本身并不是容器。從字面意思可以解讀,“Container”原譯為“集裝箱”,而“Docker”被譯為“碼頭工人”。
Docker 是一個開源的應用容器引擎,是創建容器的工具。讓開發者可以打包他們的應用和依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器或 Windows 機器上。
2013 年 PyCon 大會之后,Docker 迅速成為社區、客戶和更廣泛行業的實際標準與基石。Docker 的強大之處在于它通過可移植的形式和易于使用的工具,在應用程序和基礎設施之間創造了獨立性,使得容器技術大眾化,并使容器技術成為主流。
Docker 如此大火,但是我們需要知道,Docker 并不是唯一的,也不是第一個出現的容器平臺。其他的框架,例如 OpenVZ 和 LXC(Linux Container),于 2000 年中期就已經開始使用。而 FreeBSD jails,則可以追溯到更遠的年代。Docker 是在 2013 年發布的,與當今大多數主流的容器技術相比,它是非常年輕的。
雖然 Docker 不是最成熟的,卻引起了極大的關注。這是因為 Docker 是一個擴展的 Linux 容器(LXC),是一種獨特輕巧、以應用為中心的虛擬化工具。它大大降低了企業開銷,也更容易讓企業在服務器上部署軟件。且 Docker 允許系統管理員和開發人員在容器中構建任何應用程序,節省資源。
除此之外,Docker 發展迅猛的原因還有:
-
Docker 從一開始就是開源的,這使得 Docker 在行業內有了強大的吸引力。直到 2013 年,行業才開始將“開源”視為軟件生產的默認模式。
-
Docker 出現在了正確的時間。到 2013 年,虛擬機似乎已經成為了過時的技術。大家一直在尋找一種更精簡,更方便的方式來部署應用程序,而這時 Docker 出現了,它恰好符合要求。
-
Docker 使用的另一個主要重點是 DevOps。DevOps 在 2010 年初開始流行,它強調了軟件交付的敏捷性、靈活性和可擴展性。Docker 恰好為根據 DevOps 部署應用程序提供了合適的環境。
Docker 與 OpenStack
容器和虛擬機這兩種技術經常被互相比較。所謂虛擬機(Virtual Machine)是指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。
Docker 可能被認為是當前容器技術的代表,而作為虛擬機技術的代表,OpenStack 也被大眾所周知。
OpenStack 是一個開源的云計算管理平臺項目,是一系列軟件開源項目的組合。它不是一個軟件,而是一個云平臺管理的項目。這個項目由幾個主要的組件組合起來完成一些具體的工作。其中主要包括:
-
Nova(Compute):在 OpenStack 環境中計算實例(即創建的云主機)的生命周期管理。按需響應包括生成、調度、回收虛擬機等操作。
-
Neutron(Networking):確保為其它 OpenStack 服務提供網絡連接即服務。
-
Swift(Object Storage):通過基于 HTTP 的應用程序接口存儲和任意檢索的非結構化數據對象。
-
Glance(Image service):存儲和檢索虛擬機磁盤鏡像,OpenStack Compute 會在實例部署時使用此服務。
許多人都會常用 Docker 和傳統虛擬機來做比較,并且經常凸顯出 Docker 的優勢。其實這和 OpenStack 沒有直接關系。曾經許多的性能測試都會將 Docker 與 KVM 進行對比,但是后來發現這些測試是通過 OpenStack 運行的,這表明兩種技術其實可以很好地協同工作。
那么如果使用了 Docker,還能使用 OpenStack 嗎?
答案是可以的,Docker 以最簡單的形式提供了一個容器,用于管理共享基礎架構上的應用程序,同時又使它們彼此隔離。而虛擬機則通過創建一個完整的操作系統來完成類似的工作。OpenStack 的官方文檔(https://wiki.openstack.org/wiki/Docker)特別提供了部署 Docker 的解決方案,并且單獨指出:“容器并非旨在替代虛擬機,它們是互補的,因為它們更適合特定的用例?!?/p>
Docker 與 Kubernetes
如果第一次看到 Kubernetes 這個詞,可能會比較好奇它為何簡寫為 K8S。其實是 k 與 s 中間正好隔了 8 個字母,K8S 為一種偷懶地寫法。Kubernetes 是 Google 開源的一個容器編排引擎,它支持自動化部署、大規??缮炜s、應用容器化管理。
作為容器編排的解決方案,隨著 Kubernetes 越來越流行,“Kubernetes” 與 “Docker” 這兩個詞也經常會相提并論。
目前,Kubernetes 可以說是市場領導者,及編排容器和部署分布式應用程序的標準化方法。Kubernetes 可以在公共云服務或本地運行,具有高度模塊化,開放源代碼,并且擁有一個活躍的社區。許多云廠商也都已經提供了 Kubernetes 作為服務。
當然了,Docker 和 Kubernetes 并不是競爭對手。Docker 是一個容器化平臺,而 Kubernetes 是 Docker 等容器平臺的協調器。它旨在為容器提供高效地管理,監視應用程序的運行狀況,使應用程序提供不間斷地服務,而不需要運維人員去進行復雜的手工配置和處理。
云計算技術發展至今,從最開始的硬件虛擬化、IaaS、OpenStack、PaaS、容器到如今的 Serverless,云計算已經越來越接近應用邏輯。容器實現了應用的分裝,方便了應用在不同環境間的遷移,輕量級的特性又使它能夠消耗更少的資源而帶來更大的便利。當然,技術更新迭代迅速,我們只有不斷學習才能跟上行業的步伐,加油吧,小伙伴們!
總結
以上是生活随笔為你收集整理的深入了解什么是Docker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LevelDB 源码剖析(九)DBImp
- 下一篇: 容器化技术如何在数据中心实践