《Docker —— 從入門到實踐­》正體中文版
  • 前言
  • Docker 簡介
    • 什麼是 Docker
    • 為什麼要用 Docker
  • 基本概念
    • 映像檔
    • 容器
    • 倉庫
  • 安裝
    • Ubuntu
    • CentOS
  • 映像檔
    • 取得映像檔
    • 列出
    • 建立
    • 儲存和載入
    • 移除
    • 實作原理
  • 容器
    • 啟動
    • 常駐執行
    • 終止
    • 進入容器
    • 匯出與匯入
    • 刪除
  • 倉庫
    • Docker Hub
    • 私有倉庫
    • 設定檔案
  • 資料管理
    • 資料卷
    • 資料卷容器
    • 備份、恢復、遷移資料卷
  • 使用網路
    • 外部存取容器
    • 容器互連
  • 進階網路設定
    • 快速設定指南
    • 設定 DNS
    • 容器存取控制
    • 埠號映射實作
    • 設定 docker0 橋接器
    • 自訂橋接器
    • 工具與範例
    • 編輯網路設定檔案
    • 實例:創造一個點對點連線
  • 實戰案例
    • 使用 Supervisor 來管理程式
    • 建立 tomcat/weblogic 集群
    • 多台實體主機之間的容器互連
    • 標準化開發測試和生產環境
  • 安全
    • 核心命名空間
    • 控制組
    • 伺服端防護
    • 核心能力機制
    • 其他安全特性
    • 總結
  • Dockerfile
    • 基本結構
    • 指令
    • 建立映像檔
    • 從映像檔產生 Dockerfile
  • 底層實作
    • 基本架構
    • 命名空間
    • 控制組
    • Union 檔案系統
    • 容器格式
    • 網路
  • 附錄一:命令查詢
  • 附錄二:常見倉庫介紹
    • Ubuntu
    • CentOS
    • MySQL
    • MongoDB
    • Redis
    • Nginx
    • WordPress
    • Node.js
  • 附錄三:資源連結
Powered by GitBook
On this page

Was this helpful?

底層實作

Docker 底層的核心技術包括 Linux 上的命名空間(Namespaces)、控制組(Control groups)、Union 檔案系統(Union file systems)和容器格式(Container format)。

我們知道,傳統的虛擬機透過在宿主主機中執行 hypervisor 來模擬一整套完整的硬體環境提供給虛擬機的作業系統。虛擬機系統看到的環境是可限制的,也是彼此隔離的。 這種直接的做法實作了對資源最完整的封裝,但很多時候往往意味著系統資源的浪費。 例如,以宿主機和虛擬機系統都為 Linux 系統為例,虛擬機中執行的應用其實可以利用宿主機系統中的執行環境。

我們知道,在作業系統中,包括核心、檔案系統、網路、PID、UID、IPC、記憶體、硬盤、CPU 等等,所有的資源都是應用程式直接共享的。 要想實作虛擬化,除了要實作對記憶體、CPU、網路 IO、硬盤 IO、儲存空間等的限制外,還要實作檔案系統、網路、PID、UID、IPC 等等的相互隔離。

前者相對容易實作一些,後者則需要宿主機系統的深入支援。

隨著 Linux 系統對於命名空間功能的完善實作,程式員已經可以實作上面的所有需求,讓某些程式在彼此隔離的命名空間中執行。大家雖然都共用一個核心和某些執行時環境(例如一些系統命令和系統函式庫),但是彼此卻看不到,都以為系統中只有自己的存在。這種機制就是容器(Container),利用命名空間來做權限的隔離控制,利用 cgroups 來做資源分配。

Previous從映像檔產生 DockerfileNext基本架構

Last updated 5 years ago

Was this helpful?