11、Docker鏡像的分層(復用,節省空間)


版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 ————— 作者:kirin

驗證:
1.先導出兩個鏡像
[root@docker01 ~]#  docker save centos:7 -o docker_centos7.tar.gz
[root@docker01 ~]#  docker save centos_nginx:v1 -o docker_centos7_nginx.tar.gz

2.刪除12機器上的鏡像
[root@docker02 ~]#  docker  images
[root@docker02 ~]#  systemctl stop docker.socket 
[root@docker02 ~]#  systemctl stop docker

3.刪除docker數據目錄下的文件全部清空(相當於物理刪除數據庫)
[root@docker02 ~]#  rm -rf /var/lib/docker/*

4.重啟docker,刪除的這些數據目錄還會在 
[root@docker02 ~]#  systemctl restart docker
#確認沒有鏡像文件了
[root@docker02 ~]#  docker images

5.把11機器上的鏡像發送給12機器
[root@docker01 ~]#  scp -rp docker_centos7* root@10.0.0.12:/root

6.回到12機器上把鏡像導入
[root@docker02 ~]#  docker load -i docker_centos7.tar.gz  (一層鏡像)
[root@docker02 ~]#  docker load -i docker_centos7_nginx.tar.gz  (兩層鏡像)

屬於同一層的文件不需要重復導入,只需要導入一個沒有的就可以了,看似兩個文件加起來是600多MB,其實在docker上只占用400多MB,這就說明文件被復用了,只占400多MB的磁盤空間。下圖:

7.刪除鏡像。接下來咱們換個順序來導入鏡像,看看效果
[root@docker02 ~]#  docker rmi centos:7 centos_nginx:v1 
[root@docker02 ~]#  docker load -i docker_centos7_nginx.tar.gz 
[root@docker02 ~]#  docker load -i docker_centos7.tar.gz 

這就是鏡像分層,因為第一個導入的鏡像已經包含了centos7的鏡像,所以在單獨導入centos7鏡像的時候就不會再導入了

8.但如果是dockerfile構建的鏡像,就不止一層

9.接下來試驗一下dockerfile的鏡像
[root@docker01 ~]#  docker save centos7_nginx_ssh:v3 -o docker_centos7_nginx_v2.tar.gz
[root@docker01 ~]#  scp -rp docker_centos7_nginx_v2.tar.gz root@10.0.0.12:/root

10.刪除12機器上的鏡像,並導入新的鏡像
[root@docker02 ~]#  docker rmi centos:7 centos_nginx:v1 
[root@docker02 ~]#  docker load -i docker_centos7_nginx_v2.tar.gz 

11.總結:

分層的好處是能提高我們的上傳下載的速度,我們每次啟動的容器都是在鏡像的基礎上掛一個可寫層,所得安裝,所有的操作都是在這個可寫層執行的。一旦把這個可寫層提交為鏡像,那么這個鏡像又會多一層。(只要commit提交,就會變成只讀層,就會有一個新的鏡像。新的鏡像在原來的基礎上又多了一層)

然后我們可以繼續docker run、又會有一個可寫層。docker鏡像最多可以疊加到127層!所以我們使用的時候要適當分層,雖說我們用不到127層。


免責聲明!

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



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