在 Day 1 有簡單提到 Image(映像檔),它可以理解成建立 Container 時所需要的「模板」。
Image 裡面會包含程式執行需要的檔案、環境與設定,但 Image 本身並不是正在執行的程式。
例如之後想要使用 PostgreSQL,可以先取得 PostgreSQL 的 Image,再透過這個 Image 建立 Container。
可以把它想像成:
PostgreSQL Image
↓
建立 Container
↓
PostgreSQL Container
同一個 Image 也可以建立出不只一個 Container。
**Container(容器)**則是透過 Image 建立出來,實際執行的環境。
如果把 Image 想成「蛋糕模具」,Container 就可以想成使用這個模具實際做出來的蛋糕。
Image = 模板
Container = 使用模板建立並執行的環境
Container 可以被啟動、停止或刪除,而原本的 Image 並不會因為 Container 被刪除而一起消失。
因此之後還是可以使用相同的 Image,再建立新的 Container。
| Image | Container |
|---|---|
| 建立 Container 的模板 | Image 建立出的執行環境 |
| 本身不會執行 | 可以啟動與停止 |
| 可以重複使用 | 可以建立多個 |
| 類似安裝模板 | 類似實際執行的程式 |
兩者最主要的關係可以記成:
Image
↓ docker run
Container
使用 Image 建立 Container,是之後操作 Docker 很重要的基本觀念。
同一個 Image 並不是只能使用一次。
例如有一個 PostgreSQL Image,可以建立:
PostgreSQL Image
│
├── PostgreSQL Container 1
├── PostgreSQL Container 2
└── PostgreSQL Container 3
每個 Container 都是獨立執行的,因此可以有不同的設定。
這也是為什麼 Image 比較像「模板」,而 Container 才是實際建立出來的環境。
今天進一步了解了 Image 和 Container 的差別。昨天只知道 Image 可以想成模板,而 Container 是實際執行的環境,今天則更清楚兩者之間的關係。
我覺得一開始最容易搞混的地方,就是會把 Image 和 Container 當成同一個東西。了解之後才知道,其實一個 Image 可以重複建立多個 Container,而且就算 Container 被刪除,原本的 Image 也還可以繼續使用。
把這兩個基本概念弄懂之後,接下來實際操作 Docker 指令時應該會更容易理解每個步驟到底在做什麼。