1. 程式人生 > >Docker容器虛擬化(三):映象原理與生成新映象

Docker容器虛擬化(三):映象原理與生成新映象

一、映象原理

        映象是一種輕量級、可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,他包含執行某個軟體所需的所有內容,包括程式碼、執行時、庫、環境變數和配置檔案。

  • UnionFS(聯合檔案系統):Union檔案系統(UnionFS)是一種分層、輕量級並且高效能的檔案系統,它支援對檔案系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬檔案系統下(unite several directories into a single virtual filesystem)。Union檔案系統是Docker映象的基礎。映象可以通過分層來進行繼承,基於基礎映象(沒有父映象),可以製作各種具體的應用映象。

    • 特性:一次同時載入多個檔案系統,但從外面看起來,只能看到一個檔案系統,聯合載入會把各層檔案系統疊加起來,這用最終的檔案系統會包含所有低層的檔案和目錄

  • docker的映象實際上由一層一層的檔案系統組成,這種層級的檔案系統UnionFS。

    • bootfs(boot file system)主要包含了bootloader和kernel,BootLoader主要是引導載入kernel,Linux剛啟動時會載入bootfs檔案系統,在Docker映象的最底層是Bootfs。這一層與我們典型的Linux、Unix系統是一樣的,包含boot載入器和核心。當boot載入完成之後整個核心就都在記憶體中了,此時記憶體的使用權已由bootfs轉交給核心,此時系統也會寫在bootfs。

    • rootfs(root file system),在bootfs之上。包含的就是經典Linux系統中的/dev,/proc,/bin,/etc等標準目錄和檔案。rootfs就是各種不同的作業系統發行版。

  • 對於一個精簡的OS,roofs可以很小,只需要包括最基本的命令、工具和程式庫就行了,因為低層直接使用Host的kernel,自己只需要提供rootfs就行了。由此可見對於不同的Linux發行版,bootfs基本上是一致的,rootfs會有差別,因此不同的發行版本可以公用bootfs

  • 為什麼docker要採用這種分層原理?

    • 最大的好處就是資源共享。如:有多個映象都是從相同的一個base映象構建而來的,你們宿主機只需要在磁碟上儲存一份base映象,同時記憶體中也只需要載入一份base映象,就可以為所有的容器服務了。而且映象的每一層都可以被共享

二、提交容器副本

        docker commit提交容器副本使之成為一個新的映象

        docker commit -a="作者" -m="簡介"

三、在docker執行tomcat,並使之成為映象

  1. 從Hub上下載一步映象生產tomcat映象到本地併成功執行

    • docker run -it -p 8080:8080 tomcat

  2. 故意刪除上一部生產出來的tomcat容器的文件

    • tomcat下的/webapps/docs資料夾

  3. 當前的tomcat執行例項是一個沒有文件的容器,以它作為文件commit一個新的映象gyx/tomcat

    • docker commit -a="gyx" -m="tomcat without docs" 在執行的個容器的id gyx/tomcat:1.2

  4. 執行新的映象

    • docker run -it -p 8080:8080 gyx/tomcat:1.2

  5. 查砍docs檔案是否存在