版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 ————— 作者: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層。