Docker_镜像
鏡像原理
鏡像是一種輕量級、可執行的獨立軟件包,用來打包軟件運行環境和基于運行環境開發的軟件,它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環境變量和配置文件。
Docker鏡像底層原理
UnionFS (聯合文件系統)
UnionFS (聯合文件系統) : Union文件系統(UnionFS)是一種分層、輕量級并且高性能的文件系統,它支持對文件系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下。Union文件系統是Docker鏡像的基礎。鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像。
特性:一次同時加載多個文件系統,但從外面看起來,只能看到一個文件系統,聯合加載會把各層文件系統疊加起來,這樣最終的文件系統會包含所有底層的文件和目錄
Docker鏡像加載原理
Docker鏡像加載原理:
docker的鏡像實際上由一層一層的文件系統組成,這種層級的文件系統UnionFS。
Kernel 操作系統內核 rootfs 根文件系統bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引導加載kernel,
Linux剛啟動時會加載bootfs文件系統,在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統是一樣的,包含boot加載器和內核。當boot加載完成之后整個內核就都在內存中了,此時內存的使用權已由bootfs轉交給內核,此時系統也會卸載bootfs。
rootfs(root file system),在bootfs之上。包含的就是典型Linux系統中的/dev,/proc,/bin,/etc等標準目錄和文件。rootfs就是各種不同的操作系統發行版,比如Jbuntu,Centos等等。
對于一個精簡的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序庫就可以了,因為底層直接用主機的kernel,自己只需要提供rootfs就行了。由此可見對于不同的Iinux發行版,bootfs基本是致的,nootfs會有差別,因此不同的發行版可以公用bootfs。
分層的鏡像
例如下載一個tomcat,會發現有很多層
相對于下圖:
為什么Docker鏡像要采用這種分層結構
如有多個鏡像都從相同的基礎鏡像構建而來,那么宿主機只需在磁盤上保存一份基礎鏡像,同時內存中也只需加載一份基礎鏡像,就可以為所有容器服務了。而且鏡像的每一層都可以被共享。
Docker鏡像的特點
Docker鏡像都是只讀的(當容器啟動時,一個新的可寫層被加載到鏡像的項部。這一層通常被稱作容器層,容器層之下的都叫鏡像層。
鏡像commit
docker run相關參數: -p 主機端口:docker 容器端口 -P 隨機分配端口(大寫的p) -i 交互 -t 終端如
docker run -it -p 8888:80 httpd 也可以在后臺運行 docker run -d -p 8888:80 httpd
docker映射的端口是主機的8888端口,訪問一下
再來看下參數P的作用
如果啟動有如下問題:
docker0: iptables: No chain/target/match by that name.解決方法:
service docker restart 重啟docker后 iptables -L#在啟動firewalld之后,iptables被激活,此時沒有docker chain,重啟docker后被加入到iptable里面再來查看下
啟動成功,查看一下運行情況
發現已經隨機分配了端口
接下來自己編輯下首頁并保存
安裝常用工具
更新apt 工具 : apt update 安裝vim編輯器: apt install vim修改下首頁內容
再次訪問
將修改后的容器保存為新的鏡像
docker commit -a="lemon" -m="change httpd" b4be1b82a099 lemon/httpd
docker commit提交容器副本使之成為一個新的鏡像
總結
- 上一篇: 关于JWT的赛题
- 下一篇: Docker_容器数据卷