說起 “容器” ,大家的第一反應肯定是日常生活中使用的鍋碗瓢盆,或者裝運貨物的箱子盒子,用來盛放各種各樣的物品。那麼拿港口碼頭來說,每天都要通過船舶向外運送大量的貨物。裝貨的時候肯定不會直接扔進船艙,所以每個碼頭都會用大量的集裝箱來運載貨物。有了這些集裝箱,貨物不用雜亂無章地堆放在一起,又可以按照分類一層一層地擺放,更易於管理,同時也方便運輸。
那麼我們今天說的 “容器” 究竟是什麼呢?它的靈感其實就來源於那些 “集裝箱” 。在說 “容器” 之前,先來簡單講一下我們很耳熟的 —— “虛擬機器(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 理念,滿足精益開發、運維一體化,大幅降低分散式計算資源構建複雜度,大幅降低使用成本。
推薦閱讀: