Docker原理
Last updated
Was this helpful?
Last updated
Was this helpful?
這裡直接引用 Docker blog「The 10 Most Common Questions IT Admins ask About Docker」文章的圖。
Virtual Machine虛擬「作業系統及應用程式」,耗費較多資源。
Docker Container虛擬「應用程式」,相對節省資源。在建立及重啟時,所需的反應時間也較少。
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 client
對Docker下命令的使用者
Docker daemon
是Docker常駐程式,負責執行指令,視為Docker server端
Libcontainer
用來與Linux kernel溝通
Client
下令建立容器 -> Docker Daemon
接收到指令 -> Libcontainer
通知Linux kernel
建立容器 -> Linux kernel
建立獨立空間,擁有獨立的namespace及cgroup -> 把映像檔的內容放進容器 -> 啟動容器
這篇有詳細的圖文解釋