[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上傳或下載.

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

Create an account to read the full story.

The author made this story available to Medium members only.
If you’re new to Medium, create a new account to read this story on us.

Or, continue in mobile web

Already have an account? Sign in

Jack in the world
Jack in the world

Written by Jack in the world

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

No responses yet

What are your thoughts?