摘要:標簽空格分隔架構注該文作者是,原文地址注該文是由一篇翻譯而來。資源限制組可以被設置不超過一組內存限制這也包括文件系統。優先級一些組可能獲得更大的分配和磁盤吞吐量記錄為了測量某些系統使用了多少資源控制凍結組或檢查點和重起。
標簽(空格分隔): Docker 架構 Architecture CGroups Namespaces aufs vfs devmapper container
注:該文作者是 rajdeep,原文地址 Docker Architecture (v1.2)
注:該文是由一篇 slide 翻譯而來。
在開始之前,我們需要了解
什么是容器?
一組進程包含在隔離的環境
通過類似 cgroups 和 namespaces 的概念提供隔離
什么是 Docker?
使用鏡像的概念實現一個輕便的容器
鏡像是輕便且可發布的
CGroups限制、記錄(account)和隔離一組進程的資源使用(CPU,內存,磁盤 I/O,等等。)
資源限制:組可以被設置不超過一組內存限制 - 這也包括文件系統 cache。
優先級:一些組可能獲得更大的 CPU 分配和磁盤 I/O 吞吐量
記錄(account):為了測量某些系統使用了多少資源
控制:凍結組或檢查點和重起。
Namespace分區必不可少的內核結構來創建虛擬環境
不同的 Namespaces
pid(進程)
net(網絡接口,路由。。。)
ipc(System V IPC)
mnt(掛載點,文件系統)
uts(hostname)
user(UIDs)
Docker管理鏡像和運行期容器
后端支持多樣的文件系統
多個 Execdriver 容器實現
客戶端和服務器端組件 - 使用 HTTP 和 unix sockets 配合
Docker 運行期組件 Docker 引擎Docker 核心:容器存儲
使用任務管理容器(類似 unix 的任務)
容器處理封裝了任務的函數
所有的動作使用任務執行
Docker 初始化Docker 的主函數:docker.main()
調用:mainDaemon()
實例化引擎:eng := engine.New()
內部注冊:built--‐ins builtsin.Register(eng)
實例化任務:job := eng.Job(“initserver”)
為任務設置變量
運行任務: job.run()
啟動接受的連接:eng.Job(“AcceptConnections”).run()
內部注冊:
nstantiate daemon(eng)
eng.Register("initserver", server.InitServer)
eng.Register(“init_networkdriver”, bridge.InitDriver)
注:感覺作者這里凌亂了,處女座受不了啊。見圖
Daemon
主入口點管理容器的所有請求
維護以下引用的數據結構:
ImageGraph
Volume Graph
Engine
ExecDriver
Server
ContainerStore
Graph 是一個存儲系統文件版本和鏡像關系的數據結構
為每一個容器實例化一個 Graph
引用一個 graphdriver.Driver
在一個 Graph 上的動作:
創建一個新的 Graph
從一個 Graph 中獲取鏡像
恢復一個 Graph
創建一個鏡像并且注冊進 Graph
在 Graph 上注冊一個預先存在的鏡像
在 Docker 中鏡像和容器的概念Docker 鏡像是文件系統中的一層
容器是兩層:
層一是基于鏡像的初始化層
層二是實際的容器內容
Graph Driver被 Daemon 引用
用于抽象多種后端存儲
加載以下后端文件系統:
aufs
Device mapper(devmapper)
vfs
btrfs
容器存儲持久化后端的容器數據
使用 SQLite 實現
從 Daemon 引用
containGraph:graph
在 Daemon 恢復期間用于加載容器信息
Volume Graph基于 Graph 的簡單 vfs,為了與容器卷保持聯系
Volumes 使用在 Daemon 中的卷驅動器來創建和連接容器的卷
每個容器被分配一個或多個卷
ExecDriver對底層 Linux 控制的抽象
從 daemon 調用
支持以下實現
LXC
Native
驅動接口抽象接口與底層實現交互
驅動接口 - 網絡抽象接口與底層實現交互
libcontainer容器的底層原生實現
被原生的驅動使用
Container.config - 一個容器數據的表示
包裝過的 cgroups 和 Namespaces
原生的驅動實現 創建容器的步驟Engine --‐> Daemon --‐> ContainerCreate
ContainerCrea
2.1 檢查定義在配置文件中的內存是比 512k 大還是系統定義的限制小
2.2 檢查 SwapLimit
2.3 調用 Daemon --‐> Create
2.3.1 daemon.repositories.LookupImage --‐> tagStore.getImage() 2.3.2 daemon.newContainer() 2.3.2.1 NewContainerMonitor() 2.3.3 daemon.createRootFs() 2.3.3.1 daemon.container.driver.Create()[Graph Driver --‐ aufs, btrfs, devicemapper] 2.3.3.2 container.ToDisk()//持久化容器總結
Linux 控制原則
Docker 架構組件
原生的驅動實現
libcontainer
容器創建
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26334.html
摘要:年月日,發布版本,本次版本更新帶來了全新的應用市場交付體驗,并對源碼類服務的運行機制架構服務管理等方面做了大量優化。發布社區公開應用。我們正在進行的是將應用轉化為應用存放于應用市場中供用戶直接安裝使用。 2019年7月8日,Rainbond發布5.1.5版本,本次版本更新帶來了全新的應用市場交付Pipeline體驗,并對源碼類服務的運行機制、ServiceMesh架構、服務管理等方面做...
摘要:發布,微服務架構應用便捷管理和交付是開源的企業應用云操作系統,支撐企業應用的開發架構交付和運維的全流程,通過無侵入架構,無縫銜接各類企業應用,底層資源可以對接和管理虛擬機和物理服務器。 Rainbond v5.1.2發布,微服務架構應用便捷管理和交付 Rainbond是開源的企業應用云操作系統,支撐企業應用的開發、架構、交付和運維的全流程,通過無侵入架構,無縫銜接各類企業應用,底層資源...
摘要:發布,微服務架構應用便捷管理和交付是開源的企業應用云操作系統,支撐企業應用的開發架構交付和運維的全流程,通過無侵入架構,無縫銜接各類企業應用,底層資源可以對接和管理虛擬機和物理服務器。 Rainbond v5.1.2發布,微服務架構應用便捷管理和交付 Rainbond是開源的企業應用云操作系統,支撐企業應用的開發、架構、交付和運維的全流程,通過無侵入架構,無縫銜接各類企業應用,底層資源...
摘要:發布,微服務架構應用便捷管理和交付是開源的企業應用云操作系統,支撐企業應用的開發架構交付和運維的全流程,通過無侵入架構,無縫銜接各類企業應用,底層資源可以對接和管理虛擬機和物理服務器。 Rainbond v5.1.2發布,微服務架構應用便捷管理和交付 Rainbond是開源的企業應用云操作系統,支撐企業應用的開發、架構、交付和運維的全流程,通過無侵入架構,無縫銜接各類企業應用,底層資源...
閱讀 824·2021-10-13 09:39
閱讀 3701·2021-10-12 10:12
閱讀 1755·2021-08-13 15:07
閱讀 1013·2019-08-29 15:31
閱讀 2888·2019-08-26 13:25
閱讀 1783·2019-08-23 18:38
閱讀 1886·2019-08-23 18:25
閱讀 1862·2019-08-23 17:20