2.1 linux namespace
linux 支援的namespace
namespace api的基本系統呼叫
// 不完整的ex,以下為呼叫後截圖為
package main
import (
"log"
"os"
"os/exec"
"syscall"
)func
main()
= &syscall.credential
cmd.stdin = os.stdin
cmd.stdout = os.stdout
cmd.stderr = os.stdout
if err := cmd.run(); err != nil
}複製**
go 建立uts namespace
go 建立ipc namespace
go 建立pid namespace
go 建立mount namespace
network namespace
略2.2 linux cgroup
namespace 幫助程序隔離出單獨空間,cgroup限制每個空間可用資源
linux cgroup提供了對一組程序及將來子程序的資源限制,控制和統計能力,這些資源包括cpu,記憶體,儲存和網路等
cgroup的元件hierarchy 把一組cgroup串成乙個樹狀結構,使cgroup可以繼承
乙個subsystem只能附加到乙個hierarchy上乙個hierarchy可以新增多個subsystem
乙個程序可以在多個不在乙個hierarchy的cgroup中
fork的子程序預設在父程序cgroup中,但可以移出
docker 使用cgroup,docker建立容器時如果指定了 -m ,則會在預設的subsystem(ex:/sys/fs/cgroup/memory/)下建立(./docker/容器id子cgroup)
其他 tip:/proc/self/exe 會一直起乙個執行自己的子程序(即shell)2.3 union file system
使用branch將不同的檔案系統的檔案和目錄「透明的」覆蓋,形成乙個單一一致的檔案系統,通過cow對檔案讀寫
有意思的是,現有的graphdriver中只有少部分是真正的有寫時複製語義的聯合檔案系統:overlay的兩個版本,從docker早期就存在的aufs。記住聯合檔案系統只是乙個基於檔案的介面,通過把一組目錄交錯起來來,形成乙個單一檢視。所以與它不是乙個真正的檔案系統,如ext4或者xfs,它僅僅是站在乙個已有的檔案系統上提供了這些功能。在一些場景,對於底層檔案系統是有要求的,並且docker也會同時檢查請求的聯合檔案系統和底層的檔案系統,來保證它們是相容的。
現在的linux上docker 預設使用overlay2而不是aufs
aufs 重寫了早期的union fs, 提高可靠性和效能,增加了寫分支的負載均衡
aufs 是docker選用的第一種儲存驅動,可以快速啟動,高效利用儲存和記憶體
image layer 和 aufs
container layer 和 aufs
自己動手寫docker之cgroup
實驗環境 ubuntu 18.10 作業系統已經預設把各種controller都掛載到 sys fs cgroup 目錄下了。ls sys fs cgroup 可以檢視有哪些controller mount grep cgroup 可以檢視掛載資訊 可以看到有乙個是cgroup2,其它都是cgrou...
自己動手寫bootloader
原始出處 作者資訊和本宣告。否則將追究法律責任。為了寫乙個bootloader讓板子跑起來,首先我們要知道bootloader是個什麼東東才行。簡單的說,bootloader就是乙個引導核心啟動的一段小 也就是說當啟動完核心之後,它的使命就已經結束。bootloader生命週期 初始化硬體 設定啟動...
自己動手寫CMS
簡易的cms外掛程式,可供借鑑或者擴充套件 流程 定義內容 分類與組織內容 儲存內容 操作控制內容 定義內容 制定目標 確定需要的內容型別 目標使用者定位 確定目標使用者需要何種技術 分類與組織內容 按內容所屬的邏輯層級關係來劃分 按內容的種類來劃分,比如video text audio等等 儲存內...