Docker簡介
參考文獻:使用Docker發布Rails程序
百度云BAE,用的就是Docker;另外京東云擎,使用的是CloudFoundry。
什么是Docker?
Docker是一個用來打包,裝載和運行應用程序的一個輕量級容器的開源項目。它的工作方式非常像虛擬機,包裹所有的東西(文件系統,進程管理,環境變量等)在一個容器內。跟虛擬機有所不同,它是使用LXC(Linux kernel container)來替代虛擬層。 LXC沒有自己的內核,但是與主機和其他容器一起共享Linux內核的。 基于LXC,因此Docker是非常輕量級的,因此在運行應用程序的時候幾乎沒有性能損失。
Docker同樣提供了聰明的方法去管理你的images鏡像。通過Dockerfile和自己的緩存機制,任何人都可以容易重新發布一個更新過的鏡像而不用重新傳輸大量的數據。
為什么用Docker?
因為你從來都不知道你的應用程序能否在服務器上正常運行,就算你在本地已經測試和正常運行過了。那是因為服務器上的環境跟你的本地并非完全一致。比如RVM的設置,ruby和gem的版本差異。如果我們在發布前進行本地測試的時候,我們就已經確認如果在本地正常運行那它也能在服務器上正常運行,那我們會節省一些在服務器上debug錯誤的時間。
對于巨量的發布,使用虛擬機鏡像是相對比較容易的。你可以在幾分鐘內創建一個虛擬機實例和應用你的鏡像讓它進行工作。除了便利性,它也有如下一些問題:
如果你只做了一個很小的更新可不得不提交一個完整的新鏡像有很多的性能損失。你的應用程序可能運行在一個虛擬環境的VPS上,所以你不能運行一個虛擬機在已有的虛擬環境之上。
而在docker中,是各自獨立的:
你不必再次更新整個鏡像。Docker是基于AuFS,它將追蹤整個文件系統的差異。
由于是運行在主機的kernel之上,所以性能損失忽略不計。
你可以將Docker運行在一個虛擬機上,因為Docker本身不是一個虛擬機。