Docker容器技術(三)——鏡像的分層結構及構建

1. 鏡像的分層結構

在這裏插入圖片描述

  • 共享宿主機的kernel
  • base鏡像提供的是最小的Linux發行版
  • 同一docker主機支持運行多種Linux發行版
  • 採用分層結構的最大好處是:共享資源

比如當你已經拉取Nginx 1.17版本的鏡像之後,若再次拉取Nginx 1.16 版本時,只需要下載不同的層即可,相同的層可以共享使用,這樣就可以節省資源和網絡帶寬。當你刪除其中某個鏡像版本時,也只會刪除掉不一樣的層,因爲其中共享的層另一個版本需要使用。

在這裏插入圖片描述

  • Copy-on-Write 可寫容器層

  • 容器層以下所有鏡像層都是隻讀的

  • docker從上往下依次查找文件

  • 容器層保存鏡像變化的部分,並不會對鏡像本身進行任何修改

  • 一個鏡像最多127層

2. 鏡像的構建

docker commit 構建新鏡像三部曲

  • 運行容器
  • 修改容器
  • 將容器保存爲新的鏡像

缺點:

  • 效率低、可重複性弱、容易出錯
  • 使用者無法對鏡像進行審計,存在安全隱患

2.1 導入本地已經下載好的鏡像

docker load -i rhel7.tar

在這裏插入圖片描述

docker history rhel7:latest

在這裏插入圖片描述

2.2 運行容器

docker run -it --rm rhel7 bash		# --rm退出之後就會自動刪除

在這裏插入圖片描述

docker ps		#顯示運行容器
docker ps -a	#顯示所有容器(包括停止的容器)
docker pull busybox   				#拉取一個bysybox鏡像
docker history busybox:latest 		#查看busybox在開啓的時候執行什麼
docker run -it busybox				#運行容器

在這裏插入圖片描述

2.3 修改容器

上面在busybox容器中創建了幾個文件,已經修改過容器,修改完畢後退出保存即可。

使用ctrl+d 退出容器,但是這樣退出容器就被停止了

在這裏插入圖片描述

#可以通過容器ID再次啓動
docker start 4b39bedf3340
docker ps
docker attach 4b39bedf3340 		#再次連接
ctrl+pq							#這樣退出表示讓容器在後臺運行

在這裏插入圖片描述

在這裏插入圖片描述

2.4 將容器保存爲新的鏡像

docker commit 4b39bedf3340 busybox:v1		#保存新的鏡像
docker images								#查看所有鏡像
docker history busybox:latest				#查看原始鏡像
docker history busybox:v1					#查看新的鏡像

在這裏插入圖片描述
在這裏插入圖片描述

可以看出,新保存的V1鏡像只是在原始鏡像上面又追加了一層,其餘鏡像層和原始鏡像是完全一樣的,一層一層往上疊加。

docker rm -f 4b39bedf3340		#刪除容器(正在運行的容器需要使用 -f 強制刪除)
docker run -it --rm busybox:v1

在這裏插入圖片描述
可以看到,通過這種打包鏡像的方法,可以將我們修改後的數據得以保存,但是這種方法不推薦,因爲將數據存到鏡像層裏面,它的文件系統讀取速度效率非常低下,將數據存儲到宿主機物理磁盤中更加高效,這個後面會說。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章