Docker不是唯一的容器平臺,也不是第一個推出的。其他框架,如OpenVZ和LXC,從20世紀20年代中期誕生。而其他類似容器的技術,如FreeBSD更進一步。而Docker在2013年發布,與目前的大多數主流技術相比,是一個非常年輕的技術。
但是,Docker卻逐漸成為當前最受歡迎的云開源項目
今天的Docker公司脫胎于一個平臺即服務的初創公司dotCloud。dotCloud團隊發現,在許多應用程序和客戶之間管理依賴關系和二進制文件需要做大量的工作。因此,他們將Linux cgroups和namespaces的一些功能組合成一個簡單易用的包,這樣應用程序就可以在任何基礎設施上持續運行。這個包就是Docker鏡像,它提供將應用程序和庫封裝在單個包中(Docker鏡像),因此應用程序可以跨多環境一致部署; 提供類似于git的語義,例如“dockerpush”,“docker commit”,這樣可以讓應用程序開發人員可以輕松地采用新技術,并將其融入到現有的workflow中。
除此之外,將Docker鏡像定義為不可變層,啟用不可變的基礎設施。提交的更改被存儲為一個單獨的只讀層,這讓鏡像復用和跟蹤更改變得更加容易。另外,層還可以通過傳輸更新而不是整個鏡像來節省磁盤空間和網絡流量; 通過使用可以臨時存儲運行時更改的可寫層來實例化不可變映像,從而方便快速部署和擴展應用程序的多個實例。
所以相比之下,Docker容器是創建密集環境的理想選擇,在這種環境中,主機服務器的資源被充分利用,但不會被過度使用。這是因為Docker容器不需要通過在容器內創建客戶機操作系統來復制主機操作系統的功能。 此外,Docker不會強制您為容器分配給定數量的資源(雖然您可以為單個容器設置資源配額)。這意味著Docker容器能夠更高效和動態地使用來自主機的資源。當放置在一個容器或服務上的需求減少時,它所消耗的資源將被釋放以供其他服務使用。
因此,這讓Docker擁有了讓人信服的優點:
簡化配置:Docker倡導的主要使用場合是簡化配置。虛擬機的一大優點在于,能夠在你的基礎設施上運行任何平臺,虛擬機有自己的配置。Docker提供了同樣這項功能,卻沒有虛擬機的開銷。它讓你可以將環境和配置放入到代碼中加以部署。同樣的Docker配置還可以用在各種環境中。這將基礎設施需求與應用程序環境分離開來。
代碼流水線管理:從開發環境直到生產環境,Docker為應用程序提供了始終一致的環境,因而簡化了代碼開發和部署流水線。 Docker映像不可改變的特性以及易于構建,可以幫助你實現從開發環境直到生產環境,應用程序的運行環境都不發生變化。
服務器合并:就像使用虛擬機來合并多個應用程序一樣,Docker的應用程序隔離功能可以合并多臺服務器,以節省成本。然而,由于沒有多個操作系統的內存占用空間,又能夠在諸實例之間共享閑置未用的內存,Docker提供的服務器合并效果比借助虛擬機所能實現的好得多。
調試功能:Docker提供了未必是容器所特有的許多工具,但是它們與容器概念很搭。它們還提供了極其有用的功能。這包括:能夠檢查容器和容器版本,另外還能讓兩個容器有所不同。這在修復應用程序時大有用處。
快速部署:在虛擬機出現之前,配置新的硬件資源需要數天。虛擬化將這個時間縮短到了幾分鐘。Docker更是縮短到了短短幾秒鐘,因為它只需要為這個過程創建容器,并不啟動操作系統。正是這項支持性技術,促使谷歌和Facebook使用容器。