《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
  • pid 命名空間
  • net 命名空間
  • ipc 命名空間
  • mnt 命名空間
  • uts 命名空間
  • user 命名空間

Was this helpful?

  1. 底層實作

命名空間

命名空間是 Linux 核心一個強大的特性。每個容器都有自己單獨的命名空間,執行在其中的應用都像是在獨立的作業系統中執行一樣。命名空間保證了容器之間彼此互不影響。

pid 命名空間

不同使用者的程式就是透過 pid 命名空間隔離開的,且不同命名空間中可以有相同 pid。所有的 LXC 程式在 Docker 中的父程式為 Docker 程式,每個 LXC 程式具有不同的命名空間。同時由於允許巢狀結構,因此可以很方便的實作巢狀結構的 Docker 容器。

net 命名空間

有了 pid 命名空間,每個命名空間中的 pid 能夠相互隔離,但是網路連接埠還是共享 host 的連接埠。網路隔離是透過 net 命名空間實作的, 每個 net 命名空間有獨立的網路設備、 IP 位址、路由表、 /proc/net 目錄。這樣每個容器的網路就能隔離開來。Docker 預設採用 veth 的方式,將容器中的虛擬網卡同 host 上的一個 Docker 橋接器 docker0 連線在一起。

ipc 命名空間

容器中程式互動還是採用了 Linux 常見的程式間互動方法(interprocess communication - IPC),包括訊號量、消息隊列和共享記憶體等。然而同 VM 不同的是,容器的程式間互動實際上還是 host 上具有相同 pid 命名空間中的程式間互動,因此需要在 IPC 資源申請時加入命名空間訊息,每個 IPC 資源有一個唯一的 32 位 id。

mnt 命名空間

類似 chroot,將一個程式放到一個特定的目錄執行。mnt 命名空間允許不同命名空間的程式看到的檔案結構不同,這樣每個命名空間 中的程式所看到的檔案目錄就被隔離開了。同 chroot 不同,每個命名空間中的容器在 /proc/mounts 的訊息只包含所在命名空間的 mount point。

uts 命名空間

UTS(UNIX Time-sharing System)命名空間允許每個容器擁有獨立的 hostname 和 domain name ,使其在網路上可以被視作一個獨立的節點而非主機上的一個程式。

user 命名空間

每個容器可以有不同的使用者和組 id ,也就是說可以在容器內用容器內部的使用者執行程式而非主機上的使用者。

Previous基本架構Next控制組

Last updated 1 year ago

Was this helpful?

*註:關於 Linux 上的命名空間, 介紹的很好,另外 也非常推薦。。

這篇文章
Michael Crosby - Creating containers - Part 1