說起 “容器” ,大家的第一反應肯定是日常生活中使用的鍋碗瓢盆,或者裝運貨物的箱子盒子,用來盛放各種各樣的物品。那么拿港口碼頭來說,每天都要通過船舶向外運送大量的貨物。裝貨的時候肯定不會直接扔進船艙,所以每個碼頭都會用大量的集裝箱來運載貨物。有了這些集裝箱,貨物不用雜亂無章地堆放在一起,又可以按照分類一層一層地擺放,更易於管理,同時也方便運輸。
那么我們今天說的 “容器” 究竟是什么呢?它的靈感其實就來源於那些 “集裝箱” 。在說 “容器” 之前,先來簡單講一下我們很耳熟的 —— “虛擬機(VM)”,並對比一下兩者的區別。
△ 集裝箱碼頭(圖片來源:花瓣網)
虛擬機與容器
虛擬機(VM),大家肯定不會陌生了,作為一名計算機專業畢業的小編,在大學課程中也會使用虛擬機來學習 Linux 操作系統。顧名思義,虛擬機就是用來模擬計算機系統的軟件,讓使用者可以在一台計算機上運行看似多台計算機的設備。在一些需要不同類型的硬件或操作系統上運行軟件的需求,虛擬機是一個好幫手,這樣就無需使用其他的硬件了。
自從虛擬化技術和雲計算服務出現以來,大大小小的 IT 公司都將虛擬機作為降低成本和提高效率的一種方式。但是,虛擬機會占用大量系統資源。每個虛擬機不僅要運行一個完整的操作系統,還需要運行操作系統要運行的所有虛擬硬件。這樣就會消耗大量的內存和 CPU 資源。與運行單獨的物理計算機相比,這樣是比較經濟的;但對於某些應用程序而言卻是很浪費的。
這種情況下,就促進了容器的發展。
容器(Container)是一種更輕量級,更靈活的虛擬化處理方式,它將一個應用程序所需的一切打包在一起。容器包括所有代碼,各種依賴甚至操作系統,這讓應用程序幾乎在任何地方都可以運行。因此它的誕生,解決了一個重要問題:如何確保應用程序從一個環境移動到另一個環境的正確運行。它只是虛擬了操作系統,而不像虛擬機一樣去虛擬底層計算機。
△ 虛擬機(VM)與容器(Container)
那么對比虛擬機,容器有哪些特點呢?
- 可移植性
目前容器技術的現代形式主要體現在應用程序容器化(如 Docker)和系統容器化(如 LXC)中。這兩種形式的容器都能讓 IT 團隊從底層架構中抽象出程序代碼,從而實現跨各種部署環境的可移植性。
- 輕量級
容器通常位於物理服務器及其主機操作系統之上。它可以通過單個操作系統安裝來運行多個工作環境。因此容器特別 “輕” —— 它們只有幾兆字節,只需幾秒鍾即可啟動。
- 降低成本
與虛擬機相比,內存,CPU 和存儲效率的提高是容器技術的關鍵優勢。由於可以在同一基礎架構上支持更多容器,那么這些資源的減少就可以轉化為巨大的成本節省,同時還可以減少管理開銷。
虛擬機容器重量級輕量級表現有限原生表現每個 VM 都在自己的操作系統中運行所有容器共享主機操作系統硬件級虛擬化操作系統虛擬化啟動時間(以分鍾為單位)啟動時間(以毫秒為單位)分配所需的內存需要更少的內存完全隔離進程級隔離
△ 虛擬機和容器的特點對比
容器技術與 DevOps
說到容器技術,就不得不提一下 DevOps。DevOps(Development 和 Operations 的組合詞)是一組過程、方法與系統的統稱,用於促進開發(應用程序/軟件工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。
2014 年 11 月,Docker 作為有潛在趨勢的容器技術進入了 DevOps 的世界。它通過簡單的包裝和應用程序運輸加快了持續部署的能力,進而得到了普及。Docker 作為一項開源工具,可以將應用程序及其依賴(如配置文件等)打包到容器中,就可以在任何 Linux 服務器上運行該容器,而不會出現任何兼容性問題。
容器化是一個相當古老的概念,但 Docker 帶來了一些新的東西,早期的技術卻沒有。
- Docker 旨在整合大多數最近時期常用的 DevOps 工具,如 Puppet,Ansible,Jenkins等。
- 有了 Docker ,開發人員可以輕松地將其生產環境復制為可立即運行的容器應用程序,讓工作更有效率。
- Docker 允許應用程序在筆記本電腦,內部服務器,公共雲或私有雲等上運行,從而實現靈活性和可移植性。管理和部署應用程序要容易得多。
- Docker 實現了一個高級 API ,以提供單獨運行進程的輕量級容器。
如今,Docker 主要由開發人員和系統管理員用於與 DevOps 相關聯地構建和運行分布式應用程序。
容器技術與微服務
微服務作為一個新興的軟件架構,和容器技術也有着密不可分的關系。微服務就是把一個大型的單個應用程序和服務拆分為數十個小型的服務。一個微服務的策略可以讓工作變得更為簡便,它最大的一個優點是可以比傳統的應用程序更有效地利用計算資源。
大多數服務都有不同的資源要求。無論是網絡,磁盤,CPU 還是內存,某個資源會比其他資源使用得更多。雖然雲供應商可以提供針對內存,磁盤 IO 或 CPU 的不同設置,但系統仍然會留下大量的冗余資源。
△ 資源冗余
有了微服務,混合具有不同資源分配配置文件的服務可以提供最佳利用率。
△ 微服務提供最佳利用率
由於微服務類似於小型應用程序,因此我們必須將微服務部署到自己的虛擬機實例。可以想象,將整個虛擬機專門用於部署應用程序的一小部分並不是最有效的選擇。但是,使用容器技術,可以降低性能開銷並在同一台服務器部署上千個微服務,因為容器比虛擬機需要的計算資源要少得多。微服務進行容器化是很有必要的。它可以提高利用率和可用性,降低成本。
又拍雲容器雲是基於 Docker 的分布式計算資源網,節點分散在全國各地及海外,提供電信、聯通、移動和多線網絡,融合微服務、DevOps 理念,滿足精益開發、運維一體化,大幅降低分布式計算資源構建復雜度,大幅降低使用成本。
推薦閱讀: