Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

鹹魚普拉思發表於2019-02-01

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

容器與映象的關係

在實際操作中,我們配置好需要的容器之後可以將它轉化為映象提交到倉庫,以便之後使用。

先看一下容器與映象的轉換關係圖:

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器
容器提交(docker commit)

根據容器生成一個新的映象

命令格式:docker commit [引數] 容器[版本]

常用引數:

-a 新增作者
-c 為建立的映象加入Dockerfile命令
-m 類似git commit -m
-p 提交時暫停容器
容器匯出(docker export)

將當前容器匯出為TAR檔案

命令格式:docker export [引數] 容器

常用引數:-o 指定寫入的檔案

容器匯入(docker import)

將之前匯出的容器檔案匯入並建立為一個映象

命令格式:docker import [引數] 檔案|連結|[版本資訊]

常用引數:

-m 匯入時新增提交資訊
-c 為建立的映象加入Dockerfile命令
docker import 與 docker commit 的區別

當你使用docker import 時,匯入的映象是一個全新映象,是無法使用docker history檢視到映象的歷史資訊,使用docker commit 匯入時,生成的映象可以使用docker history檢視到映象的歷史資訊的。

深入理解Docker容器和映象

在docker文章的第一篇,我和大家簡單的比喻了映象和容器的關係,有位讀者就這個問題和我討論了一番,這裡就這個問題做一個簡單的描述,深入理解下映象和容器。

在映象層面上:

當我們檢視映象詳細資訊時,可以看到以下資訊:

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

這裡的Layers指的就是一個個只讀的檔案系統,映象就是由這樣一個個檔案系統組成的,我們把映象執行起來就會成為一個個容器,當我們在容器中做了修改並commit為映象後,就會不斷在原有的Layers層上新增一個Layer層,就像下面看到的這樣。

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

所以當我們commit後,我們看到的映象就是最上層的Layer。

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

在容器層面上:

當我們使用docker create [image id]用指定映象建立容器時,可以理解為在映象的最上層建立了一個可讀可寫的Layer,當我們修改完,使用commit提交後,這個容器的可讀可寫的Layer層就會轉化為映象的只讀的Layer層。

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

而當我們使用docker inspect檢視容器的時候只能檢視到最上層容器的資訊而無法檢視到像映象那樣的Layers,這是因為在容器的視角中Layer層是這樣的:

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

當容器中有程式執行時:

容器內部是這樣的:

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

Docker | Docker技術基礎梳理(四) - 深入理解映象與容器

總結

關於深入理解映象和容器的部分,如若有理解錯誤的地方希望大家指正,這一部分有些抽象大家可以結合實際操作加深理解,也歡迎各路大佬一起交流探討。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556785/viewspace-2565389/,如需轉載,請註明出處,否則將追究法律責任。

相關文章