[CS] Docker的三個基本概念: Image, Container, 和Registry

Jack in the world
3 min readOct 15, 2019

Docker依照包含的內容,分成三個基本的單位:

  • Image
  • Container
  • Registry

其實還有一個核心概念,就是Docker I/O,不過我們這裡只專注在上面那三個核心.

Image — 鏡像,一個作業環境的模板

Image是一個唯讀的完整操作系統環境,裡面僅僅安裝了必要的應用程序和支援程式.
它是一個模板,也就是說,可以用它來重複建立下面要說的Container,就像是你可以用鈔票的模板一直印鈔票.

每個Docker image有自己的ID,並且可以疊加.最底層的image稱作base image,其他層的稱為parent image,每一層在建成之後就不會再改變.

Container — 容器,鏡像運行時的實體

Container和Image的關係有點像是OOP子裡面的Instance和Class相互關係:一個是實體,一個是定義.
我們可以用這樣的關係來理解Container和Image的一些道理.
譬如說,我們可以用一個image去啟動多個container;這些container是獨立的,互相不會干涉,我們對任何一個container做的改變,只會對那個container造成影響.

Docker利用Container來運行應用程式,它會在所有的image上增加一個可寫存儲層,應用程式就是在這個存儲層跑.
存儲層的生命週期和Container一樣,一旦Container消亡,存儲層也會被刪除,上面的所有信息也就沒了.
如果想要保存數據,應該使用Volume,這樣可以寫在host machine上面由Docker管理的區域.

Registry

說起來,如果是熟悉Git的,其實這裡說的Registry就是Git所說的Repository.
不過不知道為何,當初發展Docker的人們用了Registry這個說法,久而久之,就成了通用的名詞,那也就沒辦法了.
更讓人混淆的,是在Docker裡,也有Repository這個名詞,不過卻是指不同的東西.

只是跟Git repository不同的,Git repository是存放原始碼的,但是Docker registry是存放Docker images的.
Docker跟Git的指令也有相似之處,譬如說push和pull,可以把images從Docker registry上傳或下載.

概念是這樣,先有個大概的認識,之後就可以慢慢來實作了.

--

--

Jack in the world
Jack in the world

Written by Jack in the world

Where in the world is Jack? 在這個世界上, 我們都在找尋自己的所在. 寫程式是我的嗜好和工作, 好好地生活在這個世界是我的日常, 學習新知識是我的快樂.

No responses yet