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