本文首發於我的公眾號 Linux雲計算網絡(id: cloud_dev),專注於干貨分享,號內有 10T 書籍和視頻資源,后台回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。
和虛擬機一樣,容器技術也是一種資源隔離的虛擬化技術。我們追溯它的歷史,會發現它的技術雛形早已有之。
容器簡史
容器概念始於 1979 年提出的 UNIX chroot,它是一個 UNIX 操作系統的系統調用,將一個進程及其子進程的根目錄改變到文件系統中的一個新位置,讓這些進程只能訪問到這個新的位置,從而達到了進程隔離的目的。
2000 年的時候 FreeBSD 開發了一個類似於 chroot 的容器技術 Jails,這是最早期,也是功能最多的容器技術。Jails 英譯過來是監獄的意思,這個“監獄”(用沙盒更為准確)包含了文件系統、用戶、網絡、進程等的隔離。
2001 Linux 也發布自己的容器技術 Linux VServer,2004 Solaris 也發布了 Solaris Containers,兩者都將資源進行划分,形成一個個 zones,又叫做虛擬服務器。
2005 年推出 OpenVZ,它通過對 Linux 內核進行補丁來提供虛擬化的支持,每個 OpenVZ 容器完整支持了文件系統、用戶及用戶組、進程、網絡、設備和 IPC 對象的隔離。
2007 年 Google 實現了 Control Groups( cgroups ),並加入到 Linux 內核中,這是划時代的,為后期容器的資源配額提供了技術保障。
2008 年基於 cgroups 和 linux namespace 推出了第一個最為完善的 Linux 容器 LXC。
2013 年推出到現在為止最為流行和使用最廣泛的容器 Docker,相比其他早期的容器技術,Docker 引入了一整套容器管理的生態系統,包括分層的鏡像模型,容器注冊庫,友好的 Rest API。
2014 年 CoreOS 也推出了一個類似於 Docker 的容器 Rocket,CoreOS 一個更加輕量級的 Linux 操作系統,在安全性上比 Docker 更嚴格。
2016 年微軟也在 Windows 上提供了容器的支持,Docker 可以以原生方式運行在 Windows 上,而不是需要使用 Linux 虛擬機。
基本上到這個時間節點,容器技術就已經很成熟了,再往后就是容器雲的發展,由此也衍生出多種容器雲的平台管理技術,其中以 kubernetes 最為出眾,有了這樣一些細粒度的容器集群管理技術,也為微服務的發展奠定了基石。因此,對於未來來說,應用的微服務化是一個較大的趨勢。
為什么需要容器
其一,這是技術演進的一種創新結果,其二,這是人們追求高效生產活動的一種工具。
隨着軟件開發的發展,相比於早期的集中式應用部署方式,現在的應用基本都是采用分布式的部署方式,一個應用可能包含多種服務或多個模塊,因此多種服務可能部署在多種環境中,如虛擬服務器、公有雲、私有雲等,由於多種服務之間存在一些依賴關系,所以可能存在應用在運行過程中的動態遷移問題,那這時如何保證不同服務在不同環境中都能平滑的適配,不需要根據環境的不同而去進行相應的定制,就顯得尤為重要。
就像貨物的運輸問題一樣,如何將不同的貨物放在不同的運輸機器上,減少因貨物的不同而頻繁進行貨物的裝載和卸載,浪費大量的人力物力。
為此人們發明了集裝箱,將貨物根據尺寸形狀等的不同,用不同規格的集裝箱裝載,然后再放到運輸機上運輸,由於集裝箱密封,只有貨物到達目的地才需拆封,在運輸過程能夠再不同運輸機上平滑過渡,所以避免了資源的浪費。
因此集裝箱被譽為是運輸業與世界貿易最重要的發明。
Docker 容器的思想就是采用集裝箱思想,為應用提供了一個基於容器的標准化運輸系統。Docker 可以將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器。容器可以運行在幾乎所有的操作系統上。這樣容器就可以跑在任何環境中,因此才有了那句話:
Build Once, Run Anywhere
這種集裝箱的思想我們也能從 Docker 的 Logo 中看出來,這不就是一堆集裝箱嗎?
我的公眾號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,后台回復 「1024」 即可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎大家關注。