1.使用docker commit 就算不进行任何操作,只要是commit两次生成的tar的md5都是不相等的
|
|
2.docker save/load 与 docker export/import
export
export与import命令:
注意:
1.会丢弃历史记录和元数据。 2.启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh,否则会报错。
docker: Error response from daemon: No command specified.
export
: 导出容器会丢失历史记录和元数据,类似与快照。
commit
如果有docker镜像仓库的权限,也可以直接将生成的镜像push到docker仓库,然后在另一台主机上pull镜像并运行为容器即可。
3.docker commit 原理
基于layer的概念,每次commit都是基于前面的镜像进行构建, 因此会越来越大(就算删除容器内的环境也不会变小)
https://blog.csdn.net/weixin_41790086/article/details/102932185
Union FS
示例
test6:1.0 是基于基础镜像commit生成的镜像
test7:1.0 是基于test6:1.0镜像commit生成的镜像,可以发现查看image history的时候 包含了基础镜像(59149c73a68c)以及test6:1.0镜像(d189c372fc80)
我在test6:1.0镜像中,先pip install Pillow,生成test7:1.0 镜像大小增加2mb,接着我在test6:1.0中删除Pillow, commit生成test7:1.0,镜像大小还是比原来多出2mb,所以在容器中进行的任何操作,只会增加镜像大小,而不会使镜像减小
4.docker export/import
启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh,否则会报错。
docker: Error response from daemon: No command specified.
解决方法:
使用 docker ps -a –no-trunc 查看启动容器需要的命令
在run的时候加上上述红框内的命令,注意不要带上双引号,不然会报错:no such file or directory: unknown
报错:
5.docker commit 和 export 到底export可以缩小多少
基于多个镜像 迭代的
commit 方式是基于前面的镜像继续往上加 ,删除前面镜像安装的包的话再commit不能缩小镜像大小
export 是基于当前镜像的,删除前面镜像安装的包再export 生成的tar会缩小
参考链接
https://blog.csdn.net/weixin_43220532/article/details/123848167
https://zhuanlan.zhihu.com/p/457356842