Jennifer的Docker筆記本
  • Introduction
  • Docker
    • Docker簡介
    • Docker原理
    • Docker指令大全
  • Docker Image
    • 搜尋公開的映像檔
    • 學習撰寫Dockerfile
    • 映像檔分層概念
  • Docker Container
    • 用指令建立容器
    • 用Compose建立容器
    • 與執行中的容器互動
    • 利用互動後的容器建立映像檔
  • DOCKER REGISTRY
    • 上傳到公有倉庫
    • 上傳到私有倉庫
  • Docker Volume
    • 同步容器資料
  • Docker Network
    • 容器的網路設定
  • Docker Installation
    • 安裝Docker/Portainer on Ubuntu
    • 安裝Nginx on Docker
  • DOCKER UNDERLYING TECHNOLOGY
    • Linux Namespaces
    • Linux CGroup (Control Group)
  • Let's Docker
    • Docker實作營
  • Docker Resources
    • Docker官方網站
    • Docker Doc.
    • Docker Hub
    • Play with Docker
    • peihsinsu的Docker學習筆記
    • 珍妮佛的學習筆記#docker
Powered by GitBook
On this page
  • Docker與Virtual Machine的差異
  • Docker共用Linux核心模組是什麼意思
  • Docker Daemon 與 Docker Client
  • Daemon/Client/Linux kernel溝通過程

Was this helpful?

  1. Docker

Docker原理

PreviousDocker簡介NextDocker指令大全

Last updated 4 years ago

Was this helpful?

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環境