一、解決的問題
由於不同的機器有不同的操作系統,以及不同的庫和組件,在將一個應用部署到多臺機器上需要進行大量的環境配置操作。
Docker 主要解決環境配置問題,它是一種虛擬化技術,對進程進行隔離,被隔離的進程獨立於宿主操作系統和其它隔離的進程。使用 Docker 可以不修改應用程序代碼,不需要開發人員學習特定環境下的技術,就能夠將現有的應用程序部署在其它機器上。
二、與虛擬機的比較
虛擬機也是一種虛擬化技術,它與 Docker 最大的區別在於它是通過模擬硬件,並在硬件上安裝操作系統來實現。
啓動速度
啓動虛擬機需要先啓動虛擬機的操作系統,再啓動應用,這個過程非常慢;
而啓動 Docker 相當於啓動宿主操作系統上的一個進程。
佔用資源
虛擬機是一個完整的操作系統,需要佔用大量的磁盤、內存和 CPU 資源,一臺機器只能開啓幾十個的虛擬機。
而 Docker 只是一個進程,只需要將應用以及相關的組件打包,在運行時佔用很少的資源,一臺機器可以開啓成千上萬個 Docker。
三、優勢
除了啓動速度快以及佔用資源少之外,Docker 具有以下優勢:
更容易遷移
提供一致性的運行環境。已經打包好的應用可以在不同的機器上進行遷移,而不用擔心環境變化導致無法運行。
更容易維護
使用分層技術和鏡像,使得應用可以更容易複用重複的部分。複用程度越高,維護工作也越容易。
更容易擴展
可以使用基礎鏡像進一步擴展得到新的鏡像,並且官方和開源社區提供了大量的鏡像,通過擴展這些鏡像可以非常容易得到我們想要的鏡像。
四、使用場景
持續集成
持續集成指的是頻繁地將代碼集成到主幹上,這樣能夠更快地發現錯誤。
Docker 具有輕量級以及隔離性的特點,在將代碼集成到一個 Docker 中不會對其它 Docker 產生影響。
提供可伸縮的雲服務
根據應用的負載情況,可以很容易地增加或者減少 Docker。
搭建微服務架構
Docker 輕量級的特點使得它很適合用於部署、維護、組合微服務。
五、鏡像與容器
鏡像是一種靜態的結構,可以看成面向對象裏面的類,而容器是鏡像的一個實例。
鏡像包含着容器運行時所需要的代碼以及其它組件,它是一種分層結構,每一層都是隻讀的(read-only layers)。構建鏡像時,會一層一層構建,前一層是後一層的基礎。鏡像的這種分層存儲結構很適合鏡像的複用以及定製。
構建容器時,通過在鏡像的基礎上添加一個可寫層(writable layer),用來保存着容器運行過程中的修改。