用过Docker的朋友都知道,如果不使用dockerfile构建镜像,可能会随着我们的操作构建的镜像体积会呈现爆炸性增长。这是为什么呢? 这是因为Docker镜像的文件系统是层级结构,每执行一次构建都会将叠加在前置的文件系统上。docker运行的的时候只抽取有用的部分。

如果想直接从当前的容器中构建一个镜像是不是体积就很小了呢? 我做了如下尝试:使用容器打包镜像

  1. 进入容器根目录操作
#进入目录
cd /
#查看体积
du -sh ./*
  1. 删除无用文件
#各种rm rm -rf 操作, 这里一定要认证一点
  1. 打包当前容器
# 根目录下:
tar --exclude=/proc --exclude=/sys --exclude=myImg.tar -cvf myImg.tar .
  1. 退出容器,拷贝文件包
# 退出
exit

# copy
docker cp [容器id]:/myImg.tar .
  1. 镜像导入
# 导入
cat myImg.tar|docker import - myContainer
  1. 查看镜像信息
#查看镜像
docker images

docker history myContainer

总结:

按照Docker的理论,正在运行的容器时通过镜像配置文件抽取必须的文件层,以进程的方式运行起来,如果直接打包整个运行环境,理论上是直接可用的一个完整镜像所需的文件层,这样就避免了很多无用层次文件的打包进来,这样也大大减小了镜像体积。

Tags: docker

Related Posts:
  • [尚无相关文章]

Leave a Comment