1 概述
Docker鏡像技術通過創新性的設計,徹底解決了應用交付領域的核心痛點,已經成為已成為云原生時代的事實標準。其核心價值在于??通過標準化封裝實現"一次構建,處處運行"??,從根本上改變了軟件交付的生命周期。
2 解決的問題
2.1 打包問題
一個可執行程序包,可能是各種各樣的語言編寫出來的,對環境有不同的要求。比如Java語言的jar包,需要有JVM環境才能夠執行;Python的代碼包,需要安裝Python和用pip安裝一系列依賴包環境才能執行。
把這個可執行包部署到不同的操作系統時,根據不同的操作系統的要求,需要做一些不同的環境變量等配置。比如Java環境在Windows里配環境變量和在Linux環境配環境變量的方式不一樣,在部署jar包的時候,在不同的環境上部署的腳本要寫成不一樣的。
在執行可執行程序包的時候,不同語言、不同操作系統,需要提供不同的啟動腳本。
docker鏡像則創造性地把可執行包所依賴的環境、配置、啟動腳本全部打包成一個鏡像包,里面的環境甚至還包含了一整套Linux的目錄和文件,額外再根據需要加上相關的依賴包、配置,指定好啟動腳本。這樣的一個包,不管在windows、Linux、iMac,還是在物理機、虛擬機、各種云平臺,都可以用一個簡單的命令就可以運行。這代表著可以很輕松地在各個環境中遷移,真正做到打包一次,各個平臺執行。
2.2 部署問題
要部署可執行包,除了準備好可執行包,還需要根據不同的操作系統,安裝相關的依賴,進行相關的配置,準備相關的啟動腳本等,然后再安裝可執行包、執行可執行包,完成部署。
由于docker鏡像把操作系統等環境、需要的依賴、配置、啟動腳本等都打包到鏡像包里了,原來需要根據不同語言、不同操作系統等進行的一系列準備工作全都消失了,只剩下拉取鏡像包和執行鏡像包兩個動作,這樣部署就非常簡單。
2.3 資源利用問題
傳統的部署,為了在一臺物理機上部署多應用,一般采用虛擬機的方式。虛擬機由于虛擬化管理程序,在Linux上運行Virtual Machine Manager(VMM),在windows上運行Hypervisor,這些虛擬化管理程序需要占用10%~30%的CPU、內存等資源。而Docker是通過linux的Cgroups、Namespace的配置來進行隔離,屬于內核級的虛擬化,占用的資源比虛擬機節省80%以上,整體性能可以提高1~2個數量級。
2.4 更新問題
在需求變動后,打包、部署等都需要更新。由于docker的鏡像包是一層層疊加而成的,如果要修改的話,只需要修改某些層或者增減某些層,然后重新打包即可。這些內容一般通過dockerfile來進行維護,這些改動只需要在dockerfile上調整,然后重新打包即可,非常的方便。
鏡像包更新后,docker上拉取包也比較高效,只需要拉取更新的層即可。docker的創建和刪除容器的速度也很快,刪除掉老的容器,再創建和啟動新版本鏡像的容器即可。當部署的服務器比較多,還可以用相關的調度工具,逐步把所有的應用都更新了。