原理)
Docker容器技術(shù)原理一、容器技術(shù)本質(zhì)容器底層原理容器不是虛擬機本質(zhì)是受 Namespace 隔離、CGroup 資源限制、UnionFS(Overlay2)做分層文件系統(tǒng)擁有獨立文件系統(tǒng)的普通進程直接復(fù)用宿主機 Linux 內(nèi)核。鏡像提供只讀 rootfs 模板實例化后生成容器容器新增可寫層運行業(yè)務(wù)進程。三大核心支撐技術(shù)Namespace命名空間實現(xiàn)隔離把進程的 PID、網(wǎng)絡(luò)、掛載、用戶、主機名等系統(tǒng)資源隔開容器內(nèi)部看不到宿主機其他進程資源。CGroup實現(xiàn)資源限制對 CPU、內(nèi)存等硬件資源做配額管控限制容器能使用多少宿主機資源。UnionFS聯(lián)合文件系統(tǒng)Docker 默認 Overlay2實現(xiàn)鏡像分層存儲多層鏡像疊加形成容器統(tǒng)一文件視圖。容器 vs 傳統(tǒng)虛擬機對比容器共享宿主機內(nèi)核啟動秒級資源損耗極小隔離基于內(nèi)核隔離強度弱于虛擬機。虛擬機Hypervisor 之上運行完整 Guest OS啟動慢資源開銷大硬件級強隔離。運行時分層低層運行時runc負責(zé)調(diào)用內(nèi)核做 Namespace、CGroup 配置啟動容器進程。高層運行時containerd封裝低層提供鏡像管理、容器生命周期管理、API 能力。二、Docker 存儲原理Overlay2Docker 默認存儲驅(qū)動為 overlay2屬于 UnionFS 實現(xiàn)。將鏡像拆分為多層只讀層容器啟動時新增一層可寫層。目錄位置宿主機/var/lib/docker/overlay2存放各層文件merged目錄是多層疊加后給容器看到的完整文件視圖。寫時復(fù)制 CoW修改文件時把只讀層文件拷貝到上層可寫層再修改只讀鏡像層不會改動。查看命令docker info | grep Storage Driver查看存儲驅(qū)動mount可以看到 overlay2 掛載信息。三、Namespace 命名空間詳解作用內(nèi)核級隔離手段把系統(tǒng)資源劃分到不同命名空間不同命名空間進程互相看不見。主要隔離類型PID、NET 網(wǎng)絡(luò)、MNT 掛載、UTS 主機名、USER 用戶、IPC 進程通信。查看宿主機ls -l /proc/pid/ns可以查看一個進程的各個命名空間容器擁有獨立的 ns。注意Namespace 只做隔離不限制資源用量資源限制交給 CGroup 完成。四、Docker Bridge 網(wǎng)絡(luò)模式默認網(wǎng)絡(luò)組件虛擬網(wǎng)橋docker0每一個容器一對veth?pair虛擬網(wǎng)卡一端在容器 netns一端掛接 docker0 網(wǎng)橋。三種流量轉(zhuǎn)發(fā)流程容器之間互通同一網(wǎng)橋數(shù)據(jù)包直接走 docker0 網(wǎng)橋轉(zhuǎn)發(fā)不經(jīng)過宿主機物理網(wǎng)卡宿主機也可以直接訪問容器內(nèi)網(wǎng) IP。容器訪問外網(wǎng)iptables POSTROUTING 鏈執(zhí)行MASQUERADE源地址偽裝 SNAT將容器內(nèi)網(wǎng) IP 替換成宿主機網(wǎng)卡 IP 向外發(fā)包。外部訪問容器端口映射?p外部流量到宿主機iptables PREROUTING 鏈執(zhí)行DNAT把宿主機端口轉(zhuǎn)換為容器內(nèi)部 IP 端口經(jīng)由 docker0 網(wǎng)橋交給目標(biāo)容器。底層依靠 iptables NAT 規(guī)則完成地址轉(zhuǎn)換。五、鏡像與容器簡單補充鏡像多層只讀文件靜態(tài)模板容器鏡像運行起來的實例擁有一層可寫層。Dockerfile 可以構(gòu)建自定義鏡像每一條指令生成鏡像一層。六、易考簡答濃縮容器本質(zhì)隔離 資源限制的進程復(fù)用宿主機內(nèi)核。三大技術(shù)Namespace 做隔離CGroup 做資源限制UnionFS (overlay2) 做分層文件系統(tǒng)。Bridge 網(wǎng)絡(luò)三場景容器間互通走網(wǎng)橋容器出網(wǎng) MASQUERADE外部訪問容器 DNAT 端口映射。容器和虛擬機最大區(qū)別容器共享內(nèi)核輕量虛擬機有獨立完整操作系統(tǒng)重、隔離更強。runc 底層干活containerd 做高層管理dockerd 是 docker 守護進程。