網站首頁 編程語言 正文
Docker 鏡像是什么
?UnionFS(聯合文件系統)
UnionFS(聯合文件系統):Union文件系統是一種分層、輕量級并且高性能的文件系統,它支持對文件系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下(unite several directories into a single virtual filesystem)。Union文件系統是Docker 鏡像的基礎。鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像。
特性:一次同時加載多個文件系統,但從外面看起來,只能看到一個文件系統,聯合加載會把各層文件系統疊加起來,這樣最終的文件系統會包含所有底層的文件和目錄。
Docker 鏡像加載原理
docker 的鏡像實際上是由一層層的文件系統組成,這種層級的文件系統 UnionFS。
bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader 主要是引導加載 kernel,Linux 剛啟動時會加載 bootfs 文件系統,在 Docker 鏡像的最底層是 botfs。這一層與我們典型的 Linux/Unix 系統是一樣的,包含 boot 加載器和內核。當 boot 加載完成之后整個內核就都在內存中了,此時內存的使用權已由 bootfs 轉交給內核,此時系統也會卸載 bootfs。
rootfs (root file system),在 bootfs 之上,包含的就是典型 Linux 系統中的 /dev,/proc,/bin,/etc 等標準目錄和文件。rootfs 就是各種不同的操作系統發行版,比如 Ubuntu,Centos 等等。
對于一個精簡的OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序庫就可以了,因此底層直接用 Host 的kernel,自己只需要提供 rootfs 就行了。由此可見對于不同的 Linux 發行版嗎,bootfs 基本是一致的,rootfs 會有差別因此不同的發行版本可以公用bootfs。
分層的鏡像
我們以 tomcat 鏡像為例,在下載的過層中可以看到 docker 的鏡像好像是在一層一層的在下載。
- 為什么 Docker 鏡像要采用這種分層結構
最大的好處就是-共享資源
比如:有多個鏡像都是從相同的 base 鏡像構建而來,那么宿主機只需要在磁盤上保存一份 base 鏡像,同時內存中也只需要加載一份 base 鏡像,就可以為所有容器服務了。而且鏡像的每一層都可以被共享。
- 特點
Docker 鏡像都是只讀的,當容器啟動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫做“鏡像層”。
Docker 鏡像 commit 操作
docker commit 能做什么
docker commit
提交容器副本使之成為一個新的鏡像docker
commit 格式
docker commit -m='提交的描述信息' -a='作者' 容器ID 新鏡像名:標簽
?案例演示
下載一個 tomcat 鏡像到本地并成功運行
[root@docker ~]# docker pull tomcat
[root@docker ~]# docker run -d -p 8888:8080 tomcat
進入容器并在 / 目錄下創建文件 test,退出容器
[root@docker ~]# docker exec -it $(docker ps -q) bash
root@4004f1503c75:/usr/local/tomcat# touch /test
root@4004f1503c75:/usr/local/tomcat# exit
當前正在運行的 tomcat 容器,根目錄下新創建了一個 test 文件,以它為模板 commit 一個根目錄下有 test 文件的 tomcat 鏡像
#新鏡像創建成功
[root@docker ~]# docker commit -a="test" -m="test" $(docker ps -q) tomcat:test
sha256:1dcb7604643bb29e47420f7a4d40582564a89df59fd3ae4602e72a84f27af9db
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat test 1dcb7604643b About a minute ago 649 MB
tocmat latest 625b734f984e 41 hours ago 648 MB
啟動新鏡像 tomcat:test,查看 / 目錄下是否具有 test 文件
[root@docker ~]# docker run -d tomcat:test
[root@docker ~]# docker exec -it ec738896bc67 ls /test
/test
原文鏈接:https://blog.csdn.net/Tiamon_/article/details/109269364
相關推薦
- 2022-04-09 WPF中的數據模板用法介紹_基礎應用
- 2022-06-14 如何利用Python擬合函數曲線詳解_python
- 2022-11-03 python回歸分析邏輯斯蒂模型之多分類任務詳解_python
- 2022-06-12 C語言函數指針數組實現計算器功能_C 語言
- 2022-07-07 Python?pluggy模塊的用法示例演示_python
- 2022-06-18 Android?ScrollView實現滾動超過邊界松手回彈_Android
- 2022-09-20 Redis安全策略詳解_Redis
- 2022-09-22 docker安裝Oracle數據庫
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支