docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker容器commit打包越来越大

docker容器commit打包越来越大的原因分析及解决

作者:nanke_yh

文章介绍了Docker容器打包变大的原因,并提供了解决方法,具体步骤包括使用export命令导出容器,然后使用import命令导入镜像,最后将镜像展开成容器,这种方法可以有效减少镜像文件的大小,避免因Docker镜像层的概念导致的文件膨胀问题

docker容器commit打包越来越大

一、背景和原因

docker容器就是以便于移植和部署著称。那么在docker使用过程中,少不了对容器进行反复的的打包和部署。

为了追求容器完整性,往往使用docker commit 容器ID 新镜像名:tag 来操作,再使用save/load对其进行打包/部署镜像。

但是根据上面的命令操作往往发现,即使很小的容器经过上述步骤操作几次后得到的镜像仍旧会变得很大很大(即使容器内的文件都被删掉了)。

这主要是由于:

docker镜像的构建方式是以层的概念来实现的,在容器内所做的所有操作都会在构建镜像时运行一遍,每一个操作所涉及到的内存空间, 都会成为镜像文件的一部分。

看到的大都是压缩容器根目录制作基础镜像或者操作Dockerfile之类的,相对就比较复杂,或者不是我们想要的答案。

以下参考文章中的方法1给出比较详细好用的解决方法步骤。

二、解决方法

为了减少镜像文件所占内容空间,采用export直接打包容器,然后通过import导入镜像,继而展开成容器。

1、可采用export命令打包容器生成镜像文件

docker export -o name.tar 容器ID
或者docker export 容器ID > name.tar

注:此时必须记下当前容器的COMMAND内容,后面要用到。

2、加载成镜像

生成的tar镜像包就可以进行移植和部署,假设换了一台机器后部署该镜像,加载镜像可采用的命令:

docker import name.tar 容器name:tag

3、将镜像展开成容器

如果正常使用的docker run命令时将会出现报错:

docker: Error response from daemon: No command specified.
See 'docker run --help'.
此时就体现第1步中需要记住的COMMAND内容的重要性了。

如果原环境还在,可通过 docker ps --no-trunc 查看你原容器的COMMAND。假设原容器的COMMAND为"bash"。

将原来使用export导出镜像时的容器COMMAND内容追加到要启动容器后面即可:

docker run -itd --restart=always --name xxx xxx:latest "bash"

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文