我喜歡肯·科克倫的回答。
但我想補充一些觀點,這里沒有詳細(xì)說明。在我看來,碼頭在整個過程中也有所不同。與VM相比,Docker并不是(僅僅)最優(yōu)的硬件資源共享,而且它還為打包應(yīng)用程序提供了一個“系統(tǒng)”(更好,但不是必須的,作為一組微服務(wù))。
在我看來,它適應(yīng)了像rpm這樣面向開發(fā)人員的工具之間的差距,德比安包裹,馬文,NPM+Git在一邊,操作工具(如木偶VMware,Xen,你說吧.
為什么將軟件部署到碼頭映像(如果這是正確的術(shù)語)比簡單部署到一致的生產(chǎn)環(huán)境容易呢?
您的問題假設(shè)了一些一致的生產(chǎn)環(huán)境。但是如何保持它的一致性呢?考慮一些服務(wù)器和應(yīng)用程序的數(shù)量(>10),在管道中的各個階段。
為了保持同步,你將開始使用類似木偶的東西,大廚或者你自己的配置腳本,未發(fā)布的規(guī)則和/或大量的文檔.理論上,服務(wù)器可以無限期運行,并且保持完全一致和最新。實踐無法完全管理服務(wù)器的配置,因此有相當(dāng)大的配置漂移空間,以及對正在運行的服務(wù)器的意外更改。
因此,有一種已知的模式可以避免這種情況,即所謂的不可變服務(wù)器..但不變的服務(wù)器模式并不受歡迎。主要是因為在Docker之前使用的VM的局限性。處理幾個千兆字節(jié)的大圖像,移動這些大圖像,僅僅為了改變應(yīng)用程序中的一些字段,是非常辛苦的??梢岳斫?。
有了Docker生態(tài)系統(tǒng),您將永遠(yuǎn)不需要在“小更改”(謝謝aufs和Registry)上移動千兆字節(jié),您也不必?fù)?dān)心在運行時將應(yīng)用程序打包到Docker容器中會失去性能。你不需要擔(dān)心那個圖像的版本。
最后,您甚至可以復(fù)制復(fù)雜的生產(chǎn)環(huán)境,即使在Linux筆記本上也是如此(如果在您的情況下不起作用,就不要打電話給我);)
當(dāng)然,您可以在VM中啟動Docker容器(這是個好主意)。在VM級別上減少服務(wù)器配置。所有這些都可以由Docker來管理。
同時,Docker使用自己的實現(xiàn)“l(fā)ibContainer”來代替LXC。但LXC仍然可用。