1、背景
在一些情况下,需要将容器直接打包为镜像。不想在Dockerfile中编写一行行代码。但是使用:
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
会导致镜像越来越大。10G的镜像经过4次commit就变成100G。
我们可以通过:docker system df -v,在【Containers space usage:】中查看容器的大小
虽然显示只有10G,但是commit后会非常大。
方法1
直接打包容器,然后import为镜像img1
docker export -o img.tar 容器ID
docker import img.tar img1:20221011123412
方法2
将容器内根目录所有文件压缩。传到容器外,再import为镜像img1
# 第一步:压缩
sudo tar --exclude=./proc --exclude=./sys --exclude=./img.tar -cvf img.tar ./
第二步:传出容器
docker cp 容器ID:img.tar ./
第三步:import为镜像
cat img.tar | sudo docker import - img:202201010101
注意压缩时会提醒权限问题【tar: Exiting with failure status due to previous errors】,导致压缩报错。原因是:proc 、sys的部分文件是没有权限的。而tar --exclude=./proc 虽然是跳过proc,但是注意绝对/相对路径文件。否则还是压缩/proc,还会报错。
综上对比,还是方法1比较好用。不要再用方法2了。