Docker的映象和容器的區別

2021-08-09 17:51:50 字數 1378 閱讀 2881

要理解docker映象和docker容器之間的區別,確實不容易。

假設linux核心是第0層,那麼無論怎麼執行docker,它都是執行於核心層之上的。這個docker映象,是乙個唯讀的映象,位於第1層,它不能被修改或不能儲存狀態。

乙個docker映象可以構建於另乙個docker映象之上,這種層疊關係可以是多層的。第1層的映象層我們稱之為基礎映象(base image),其他層的映象(除了最頂層)我們稱之為父層映象(parent image)。這些映象繼承了他們的父層映象的所有屬性和設定,並在dockerfile中新增了自己的配置。

docker映象通過映象id進行識別。映象id是乙個64字元的十六進製制的字串。但是當我們執行映象時,通常我們不會使用映象id來引用映象,而是使用映象名來引用。要列出本地所有有效的映象,可以使用命令

# docker images

映象可以發布為不同的版本,這種機制我們稱之為標籤(tag)。 

如上圖所示,neo4j映象有兩個版本:lastest版本和2.1.5版本。

可以使用pull命令加上指定的標籤:

# docker pull ubuntu:14.04

# docker pull ubuntu:12.04

docker容器可以使用命令建立:

# docker run imagename

它會在所有的映象層之上增加乙個可寫層。這個可寫層有執行在cpu上的程序,而且有兩個不同的狀態:執行態(running)和退出態(exited)。這就是docker容器。當我們使用docker run啟動容器,docker容器就進入執行態,當我們停止docker容器時,它就進入退出態。

當我們有乙個正在執行的docker容器時,從執行態到停止態,我們對它所做的一切變更都會永久地寫到容器的檔案系統中。要切記,對容器的變更是寫入到容器的檔案系統的,而不是寫入到docker映象中的。

我們可以用同乙個映象啟動多個docker容器,這些容器啟動後都是活動的,彼此還是相互隔離的。我們對其中乙個容器所做的變更只會侷限於那個容器本身。

如果對容器的底層映象進行修改,那麼當前正在執行的容器是不受影響的,不會發生自動更新現象。

如果想更新容器到其映象的新版本,那麼必須當心,確保我們是以正確的方式構建了資料結構,否則我們可能會導致損失容器中所有資料的後果。

64字元的十六進製制的字串來定義容器id,它是容器的唯一識別符號。容器之間的互動是依靠容器id識別的,由於容器id的字元太長,我們通常只需鍵入容器id的前4個字元即可。當然,我們還可以使用容器名,但顯然用4字元的容器id更為簡便。

Docker容器和映象的區別

在學習使用docker過程中會遇到映象和容器,兩者之間的區別是什麼?有什麼關聯?本文將用 並茂的方式介紹容器 映象的區別,能夠很好的幫助各位深入理解docker。映象可以看成是由多個映象層疊加起來的乙個檔案系統 通過unionfs與aufs檔案聯合系統實現 映象層也可以簡單理解為乙個基本的映象,而每...

docker容器和映象的區別

此內容有些偏底層,程式設計師看了會沉默,運維狗看了會流淚 在學習使用docker過程中會遇到映象和容器,兩者之間的區別是什麼?有什麼關聯?本文將用 並茂的方式介紹容器 映象的區別,能夠很好的幫助各位深入理解docker。映象可以看成是由多個映象層疊加起來的乙個檔案系統 通過unionfs與aufs檔...

Docker容器和映象的區別

在學習使用docker過程中會遇到映象和容器,兩者之間的區別是什麼?有什麼關聯?本文將用 並茂的方式介紹容器 映象的區別,能夠很好的幫助各位深入理解docker。映象可以看成是由多個映象層疊加起來的乙個檔案系統 通過unionfs與aufs檔案聯合系統實現 映象層也可以簡單理解為乙個基本的映象,而每...