For the complete documentation index, see llms.txt. This page is also available as Markdown.

Docker原理

Docker與Virtual Machine的差異

這裡直接引用 Docker blog「The 10 Most Common Questions IT Admins ask About Docker」文章的圖。

Virtual Machine虛擬「作業系統及應用程式」,耗費較多資源。

Docker Container虛擬「應用程式」,相對節省資源。在建立及重啟時,所需的反應時間也較少。

虛擬機器擁有獨立OS,但Docker容器卻是共用Linux核心模組。

Docker共用Linux核心模組是什麼意思

Linux的2個核心模組,namespace及cgroup使得本機上的process得以擁有隔離性,也就是所謂的容器。

Namespace隔離各項資源(PID、網路等等),使得容器內的process得以被隔離在自己的空間內。cgroup則用來分配硬體資源。

既然Docker共用本機上的Linux kernel,那也就代表Docker提供的Linux映像檔不需要包含Linux kernel,事實上各種Linux版本的基底映像檔(例如:Ubuntu, CentOS, Fedora, Debian..)都只有包含目錄結構、操作系統庫(例如:/bin, /sbin底下的shell命令)、/lib底下的依賴庫、套件管理系統(例如:apt, yum....)。

Docker Daemon 與 Docker Client

Docker client 對Docker下命令的使用者

Docker daemon 是Docker常駐程式,負責執行指令,視為Docker server端

Libcontainer 用來與Linux kernel溝通

Daemon/Client/Linux kernel溝通過程

Client下令建立容器 -> Docker Daemon接收到指令 -> Libcontainer通知Linux kernel建立容器 -> Linux kernel建立獨立空間,擁有獨立的namespace及cgroup -> 把映像檔的內容放進容器 -> 啟動容器

這篇這些元件如何合作建立Docker環境有詳細的圖文解釋

Last updated