Docker原理之rootfs


 前情回顧

  https://www.cnblogs.com/lioa/p/12666497.html 上篇文章的“容器里的進程看到的文件系統”章節把ns.c加上mount 函數后,同時調用CLONE_NEWNS啟用namespace,我們宿主機啟動的容器進入后看到的文件系統就是掛載的/tmp,這樣做到了文件系統的隔離。

docker文件系統

  而當我們進入一個docker容器內部時,幾乎看到的是一個完整的linux根目錄系統,又是如何做到的呢?

  

chroot

  change root file system。來一個/bin/bash的移花接木。

## home目錄創建abc目錄
cd
mkdir -p abc
## 在abc目錄下創建lib,lib64,bin目錄
mkdir -p abc/{bin,lib,lib64}
## 將bash命令拷貝abc對應目錄
cp -v /bin/{bash,ls} abc/bin
## 把 bash 命令需要的所有 so 文件,也拷貝到 abc 目錄對應的 lib 路徑下。找到 so 文件可以用 ldd 命令
T=$HOME/abc
list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
for i in $list; do cp -v "$i" "${T}${i}"; done
## 切換
$ chroot $HOME/abc /bin/bash
## 設置環境變量
export PATH=$PATH:/bin
## 查看根目錄
ls /

rootfs

  rootfs 根文件系統,即docker的鏡像。docker 鏡像是利用UnionFS + layer 的概念。

參考

  https://time.geekbang.org/column/article/17921

目錄

  https://www.cnblogs.com/lioa/p/12664686.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM