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"

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nanke_yh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值