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层。

posted @ 2022-06-03 10:48  kirin(麒麟)  阅读(931)  评论(0编辑  收藏  举报
Δ