【Docker 筆記】Image & Container 的基本觀念

Chengcheng Hsu
6 min readSep 11, 2024

--

Photo by Bernd 📷 Dittrich on Unsplash

此系列筆記

  1. 【Docker 筆記】Image & Container 的基本觀念(本篇)
  2. 【Docker 筆記】Image & Container 基礎實作
  3. 【Docker 筆記】部署 React 到 AWS EC2

索引

  1. Docker 是什麼
  2. Docker 想解決什麼問題
  3. Container 的一致性、隔離性以及可攜性
  4. 所以容器化是什麼

Docker 是什麼

【Docker只是一個實現容器化的工具 | 重點是容器化Container | 全網最詳解 | 分散式宇宙一部曲】這部影片提到:

  1. 容器化(Containerization)是一門技術
  2. Docker 是實現容器化技術的一個工具(待會提到容器化的意思)
  3. 實現容器化技術不一定要用 Docker,像是 podman 、k8s 都可以實現

Docker 想解決什麼問題

假設今天你本地的電腦是 macOS,遠端正式站的主機是 linux,在部署的應用程式到正式站時你可能要先熟悉 linux 的設定以及語法,然後 setup 好應用程式需要的環境後才能部署,部署完還要確保說你的應用程式能和作業環境是相容的,這部分就讓工程師花了很多時間在處理可能的配置錯誤,導致沒時間處理真正的業務邏輯。

而 Docker 的出現可以解決要花很多時間在處理配置上的問題,只要此作業環境能安裝 Docker,就能透過執行 Image 來跑 Container (待會解釋兩個名詞)來執行應用程式,就能來大大減少出錯的機會,就下面的圖來說 Container 主要是執行在 Docker Engine 上,而 Docker Engine 又建立在 OS 或是 VM 上,而要細究這些有什麼不同可以參考這篇淺談虛擬化技術:虛擬機(VM)與容器(Container)之技術價值與比較分析

source: 淺談虛擬化技術:虛擬機(VM)與容器(Container)之技術價值與比較分析

Container 的一致性、隔離性以及可攜性

而每個 Container 都具有一致性、隔離性以及可攜性:

  1. 一致性:只要該主機有安裝 Docker,在跑起來相同的 Image 時就會有相同的功能。
  2. 隔離性:Container 內的執行應用程式互不干涉,如 MySQL 和 SQL 都跑在個別的 Container,環境變數不互相干預,就不會造成應用程式出錯。
  3. 可攜性:Image 可以跑在任何一台有安裝 Docker 的電腦。

這些特性看看就好。

所以容器化是什麼

是一個輕量級的虛擬化技術,Docker 會將應用程式運行時所需的環境設定、軟體版本、應用程式的程式碼、資料庫以及網路配置等等打包成一個 Image(是一個可被執行的檔案),再透過 Docker 將 Image 跑起來變成 Container(可以想像成是一個 instance,會下載 Image 所描述的相關配置,如 code libraries 以及執行 runtime 等等,而應用程式也會被跑起來了),來用以下這張圖解釋一下 Image 和 Container 在整個流程所扮演的位置在哪。

Docker_Client

執行 docker 的指令,可以想像是餐廳老闆,他吩咐說應該要做哪些餐點,廚房要怎麼配置等等,可以透過 Command Line 或是 Docker Desktop 的GUI 介面來執行。

Learn Docker in 1 Hour | Full Docker Course for Beginners

Docker Host (DockerDaemon)

聽從於 Docker_Client 的指令去執行事情,可以想像是餐廳執行主廚,被吩咐說要去買食譜回來研究開發並料理出餐等等。

Images

會透過 Dockerfile (放在專案的根目錄)描述的東西來打包成 Image,而 Docker Host 會執行 Images 上的步驟,就像是食譜。

Container

透過 Images 跑起來的 instance 環境,跑起來後你的應用程式就等同於部署好了,像是一個廚房能一直提供服務(做出餐點),而多個 Container 就像是不同的廚房都負責不一樣的餐點,但一樣都是要透過食譜製作出料理,而且一個 Container 只會運行一個 Image 的服務。

Learn Docker in 1 Hour | Full Docker Course for Beginners

Registry

存放 Images 的地方,就和 github 一樣可以 push/pull,只是這裡是存放 Images,而公共 Registry,如 Docker Hub,也可以自託管的私有 Registry,保護專有或敏感的 images。

小結語

在了解 Docker 的過程還有其他的名詞如 Volumes 、Docker Compose 等等的,但這篇也算是介紹了最基本的流程,而這次的筆記也一解我過去不太理解的地方,總算是踏出了一小步,下一篇就來實際寫 Dockerfile 來產生 Image。

--

--

Chengcheng Hsu
Chengcheng Hsu

Written by Chengcheng Hsu

Movie, Travel and Story | Software developer | contact me: ychsu.wk@gmail.com

No responses yet