目录

1 问题

2 分析

3 总结

4 解决方法

1 问题

基础镜像为10G,在对应的容器中将部分包删除后,使用如下方法将容器打包成镜像。 首先,将容器保存为镜像。docker commit 容器ID 新镜像名字 然后,将镜像打包成tar。docker save -o 新镜像名字.tar 新镜像名字 理论上,这个新的镜像应该比基础镜像小,结果新的镜像竟然比基础镜像大好多,是不是很奇怪?明明删除了很多东西,为什么保存的镜像越来越大呢?

2 分析

上述问题的出现和docker的原理有关系,因为镜像是按照层存储的。 我们可以使用 docker load 来导入镜像文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件仅保存容器当时的快照状态,将丢弃所有的历史记录,而镜像文件将保存完整记录,包括历史记录等,因此,也要变大。

3 总结

docker load会保存文件的历史记录和原数据。使用docker import导入容器的快照即可。是一个快照,没有历史记录。

4 解决方法

将容器打包成tar:docker export 容器的ID > 名字.tar 导入容器快照的方式:cat 20230213.tar  | docker import - 20230213 使用docker images查看所有的镜像。

如果还是想要使用docker load,不想用docker import ,怎么办呢? 导入容器快照后,使用docker images查看所有的镜像,确认导入的镜像名字。 使用下述命令将镜像(刚刚导入的镜像)打包成tar:docker save -o test.tar 20230213 然后使用docker load 加载镜像:docker load -i test.tar 成功啦!!!

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。