---
# System prepended metadata

title: Docker的運作機制

---

# Docker的運作機制
### Docker的運作機制
Docker: 軟體 -> Linux(shell) -> Docker Engine -> Kernal -> 硬體


---
Kernel（核心）通常指的是操作系统的核心，是操作系统的主要部分，它直接與硬件交互，控制著系統的各種資源。Kernel的主要功能包括進程管理、存儲管理、設備驅動、安全性管理等。在操作系統中，Kernel是非常重要的一部分。
--- 



### Docker Hub、映像檔與容器
#### 何謂映像檔？
"映像檔"是一個用於電腦儲存資料的術語，它通常指的是一個包含**完整文件系統和資料的檔案**。映像檔通常是一個二進位檔案，它可以被當作一個單一的**實體**來處理，其中包含了整個文件系統、應用程式、驅動程式、設定檔、資料庫等等。

映像檔的應用範圍很廣，它們可以用來創建備份、分發軟體、虛擬化環境、以及安裝操作系統等等。例如，**一個作業系統映像檔可以被用來在新電腦上快速部署相同的系統環境，而一個應用程式映像檔可以被用來快速地在多台電腦上安裝相同的軟體環境**。

映像檔通常使用特定的格式，例如Windows系統常用的ISO、IMG等等，而在Linux系統中常用的格式為IMG、ISO、以及DD等等。映像檔的大小可以從數十MB到數GB不等，這取決於所包含的資料和應用程式的複雜程度。
#### 何謂實體？
在計算機科學中，"單一實體"通常指一個被當作一個整體單元來處理的實體。這個實體可以是**一個檔案、一個資料庫、一個物件、一個程式等等**。

單一實體的特點是它可以被當作一個**獨立的單元來操作**。例如，一個檔案可以被當作一個單一實體，它可以被複製、移動、刪除等等。一個程式也可以被當作一個單一實體，它可以被啟動、暫停、終止等等。

在某些情況下，多個單一實體可以被組合在一起，形成一個更大的實體。例如，在操作系統中，一個目錄可以包含多個檔案和子目錄，這些檔案和子目錄可以被當作一個整體來操作。**在映像檔中，整個文件系統和應用程式等等可以被當作一個單一實體來處理**。

總的來說，單一實體是一個重要的概念，它使得計算機科學中的各種資源和實體可以被當作一個整體來處理和管理。
#### 何謂Docker內的映像檔？
Docker的映像檔是一種特殊的映像檔，它用於虛擬化應用程式環境。Docker是一個開源的容器化平台，它可以讓開發者將應用程式和其相依的元件（例如庫檔案、配置檔案等）打包在一起，形成一個可移植的容器。

**Docker的映像檔包含了一個完整的應用程式環境**，包括了操作系統、庫檔案、執行檔、設定檔、以及環境變數等等。**Docker的映像檔通常是用Dockerfile這樣的腳本文件來定義的**，Dockerfile可以指定如何建立映像檔，包括了基礎映像檔的選擇、應用程式的安裝與配置、以及其他的設定等等。

**一個Docker的映像檔可以被用來創建多個相同的容器實例**。Docker容器是一個輕量級的虛擬化技術，它允許多個容器在同一個主機上運行，每個容器都是獨立的，有自己的文件系統、網路、IP地址等等。Docker容器使用映像檔作為模板，可以快速地建立、啟動、停止、刪除等等，讓開發者和運維人員可以更加輕鬆地管理和部署應用程式。

總體而言，Docker的映像檔是一個輕量級、可移植、可重複使用的應用程式環境，它可以讓開發者和運維人員更加輕鬆地進行應用程式開發、部署和管理。
![](https://i.imgur.com/iK7ruMo.png)

### Docker容器的生命週期與資料儲存
* 建立用完即捨棄
原因在於**容器具有簡單建立的特性，但維護卻採取一一更新的方式**
![](https://i.imgur.com/Od1qnJ9.png)
* 資料儲存
![](https://i.imgur.com/Aa2wLug.png)

在Docker中，有三種常見的掛載方式，分別是Bind mount、Volume和tmpfs mount。

---

**掛載名詞解釋：**
在計算機科學中，**掛載（mount）通常指將一個檔案系統或儲存設備與另一個檔案系統或儲存設備關聯起來的過程**。掛載使得一個檔案系統或儲存設備可以被讀取和寫入，同時也使得其中的檔案和目錄能夠被查看和操作。

---

1. Bind mount（掛載點映射）：Bind mount 是將宿主機上的目錄或檔案掛載到容器中的特定路徑上，可以透過 -v 或 --mount 參數進行指定。在使用 Bind mount 的方式時，宿主機和容器之間的檔案共享非常簡單，這種方式適合於需要將容器中的資料儲存到宿主機上的場景。

2. Volume（卷）：Volume 是一種 Docker 的管理方式，用於將容器中的資料存儲在一個獨立的卷中，並可以被多個容器共享。Volume 有很多選項可以進行配置，例如指定卷的名稱、檔案系統類型、容器中的路徑等等。在使用 Volume 的方式時，可以實現容器和宿主機之間的資料共享，同時也可以在容器之間進行資料傳遞。

3. tmpfs mount（臨時文件系統掛載）：tmpfs mount 是一種將 tmpfs（Linux 中的一種暫存文件系統）掛載到容器中的特定路徑上的方式，可以透過 --tmpfs 參數進行指定。在使用 tmpfs mount 的方式時，容器中的資料只會存儲在記憶體中，當容器被刪除時，這些資料也會同時被刪除。這種方式適用於需要在容器中進行臨時資料處理的場景，例如快取、暫存等等。

總的來說，這三種掛載方式各自具有不同的優缺點和使用場景，開發者和系統管理員可以根據自己的需求選擇合適的掛載方式。在使用這些掛載方式時，需要注意資料的安全性和可靠性，以及容器和宿主機之間的資料共享方式。

### Review
* 彼此獨立
* 可建立映像檔
* 容器不包含核心
#### 優點
因為隔離所以可乘載多個，且不互相影響
#### 缺點
只能經過Linux
主機爆炸，全部爆炸
#### 用途
一致的開發環境
方便測試新版本
容易建制多個伺服器
