1.使用docker commit 就算不进行任何操作,只要是commit两次生成的tar的md5都是不相等的

1
2
file1:367fc7b1e2ca4d416290c6b5b68e5283
file2:437eb32a507c44e781e36e18c3100f23

2.docker save/load 与 docker export/import

https://www.cnblogs.com/Cherry-Linux/p/8025777.html

https://cloud.tencent.com/developer/article/2027894

export

export与import命令:

注意:

1.会丢弃历史记录和元数据。   2.启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh,否则会报错。

docker: Error response from daemon: No command specified.

export 导出容器会丢失历史记录和元数据,类似与快照。

commit

image-20230727234542361

如果有docker镜像仓库的权限,也可以直接将生成的镜像push到docker仓库,然后在另一台主机上pull镜像并运行为容器即可。

3.docker commit 原理

基于layer的概念,每次commit都是基于前面的镜像进行构建, 因此会越来越大(就算删除容器内的环境也不会变小)

https://blog.csdn.net/weixin_41790086/article/details/102932185

image-20230727234607530

Union FS

https://www.jianshu.com/p/3ba255463047

https://coolshell.cn/articles/17061.html

示例

test6:1.0 是基于基础镜像commit生成的镜像

image-20230727234628806

test7:1.0 是基于test6:1.0镜像commit生成的镜像,可以发现查看image history的时候 包含了基础镜像(59149c73a68c)以及test6:1.0镜像(d189c372fc80)

image-20230727234637891

我在test6:1.0镜像中,先pip install Pillow,生成test7:1.0 镜像大小增加2mb,接着我在test6:1.0中删除Pillow, commit生成test7:1.0,镜像大小还是比原来多出2mb,所以在容器中进行的任何操作,只会增加镜像大小,而不会使镜像减小

image-20230727234646506

4.docker export/import

启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh,否则会报错。

docker: Error response from daemon: No command specified.

解决方法:

使用 docker ps -a –no-trunc 查看启动容器需要的命令

image-20230727234704587

在run的时候加上上述红框内的命令,注意不要带上双引号,不然会报错:no such file or directory: unknown

image-20230727234720580

image-20230727234724745

报错:

image-20230727234733925

5.docker commit 和 export 到底export可以缩小多少

基于多个镜像 迭代的

image-20230727234749335

commit 方式是基于前面的镜像继续往上加 ,删除前面镜像安装的包的话再commit不能缩小镜像大小

export 是基于当前镜像的,删除前面镜像安装的包再export 生成的tar会缩小

参考链接

https://blog.csdn.net/weixin_43220532/article/details/123848167

https://zhuanlan.zhihu.com/p/457356842

https://blog.csdn.net/u011195077/article/details/108148824

https://github.com/goldmann/docker-squash