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