Docker中的鏡像分層技術詳解


  早在集裝箱沒有出現的時候,碼頭上還有許多搬運的工人在搬運貨物,在集裝箱出現以后,碼頭上看到更多的不是工人,而且集裝箱的搬運模式更加單一,更加高效,還有其他的好處,比如:貨物多打包在集裝箱里面,可以防止貨物之前相互影響。並且到了另外一個碼頭需要轉運的話,有了在集裝箱以后,直接把它運送到另一個容器內即可,完全可以保證里面的貨物是整體的搬遷,並且不會損壞貨物本身。那么docker 鏡像在IT行業中也扮演着非常重要的形象。

  什么是docker 鏡像

  就是把業務代碼,可運行環境進行整體的打包

  如何創建docker鏡像:

  現在docker官方共有倉庫里面有大量的鏡像,所以最基礎的鏡像,我們可以在共有倉庫直接拉取,因為這些鏡像都是原廠維護,可以得到即使的更新和修護。

  Dockerfile

  我們如果想去定制這些鏡像,我們可以去編寫Dockerfile,然后重新bulid,最后把它打包成一個鏡像,這種方式是最為推薦的方式包括我們以后去企業當中去實踐應用的時候也是推薦這種方式。

  Commit :

  當然還有另外一種方式,就是通過鏡像啟動一個容器,然后進行操作,最終通過commit這個命令commit一個鏡像,但是不推薦這種方式,雖然說通過commit這個命令像是操作虛擬機的模式,但是容器畢竟是容器,它不是虛擬機,所以大家還是要去適應用Dockerfile去定制這些鏡像這種習慣。

  鏡像的概念主要就是把把運行環境和業務代碼進行鏡像的打包,我們這個課重點是了解鏡像的分層技術,我們先來看一個Ubuntu系統的鏡像。

  我們可以鏡像可以分層很多個layer,並且他們都有大小和ID,我們可以看到這里有4layer ID號,最終這個鏡像是由他們layer組合而成,並且這個鏡像它是只讀的,它不能往里面寫數據,如果想寫數據怎么辦呢?我們會在鏡像上啟一層contain layer,其實就是相當於把鏡像啟動成一個容器,那么在容器這一層,我們是可寫的。

  比如我們想在這個Ubuntu這個系統上加一層,只能在上面繼續疊加,這些工作其實都是由cow,寫字庫下的機制來實現的。

  子鏡像

  下載的時候只會下載子鏡像最上面的一層,因為其它層已經有了,那么它可以做到一個節約空間的作用。

  父鏡像

最為典型的就是鏡像的分層技術——aufs

  AufsAnother Union File System的縮寫,支持將多個目錄掛載到同一個虛擬目錄下。

  已構建的鏡像會設置成只讀模式,read-write寫操作是在read-only上的一種增量操作,固不影響read-only層。

這個研究有一個好處,比如我們現在可以看到手機里面的APP,在命令里面都會用APP字段下回來,在下回來之前它就是一個靜態的,我們沒有往里面寫東西,但是我們啟動起來以后,我們就可以往里面寫東西,進行各種各樣的操作。但是如果我們把它關掉了以后,或者刪除了以后,它的這個鏡像是存在遠端的,所以在這個鏡像里面是不會去修改的。並且這樣也會有一個非常好的地方,這個場景非常適合我們去實現測試環境,因為我們的測試環境經常會有一個操作就是灌數據,我們可以提前把這個鏡像數據打包到測試里面,那么這個鏡像軟件里面包含了,最上面是nginx,比如它里面會有一些數據,我們可以在往上面打一層數據,打完之后把它起成一個容器就可以去測試,測試完之后這個容器里面會生成各種各樣的數據,也就是臟數據,這樣的話,我們就可以把這個容器刪掉,刪掉以后我們鏡像里面的容器是不會受影響的。如果說它想再創建一套,我們可以把這個鏡像再啟一個容器,就可以是一個一模一樣的,並且是一個干凈的環境。

 

原文鏈接:http://www.maiziedu.com/wiki/cloud/dockerimage/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM