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

 更新时间:2025年03月07日 09:48:45   作者: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"

总结

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

相关文章

  • 一文教你轻松搞定Docker无法拉取镜像问题

    一文教你轻松搞定Docker无法拉取镜像问题

    这篇文章主要介绍了当Docker无法成功拉取镜像时可能遇到的问题以及解决方法,文中通过代码介绍的非常详细,对遇到这个问题的同学们具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-02-02
  • 如何修改docker官方镜像内部内容并重新build镜像

    如何修改docker官方镜像内部内容并重新build镜像

    这篇文章主要介绍了如何修改docker官方镜像内部内容并重新build镜像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Docker安装运行apache2服务器做图片服务器的方法

    Docker安装运行apache2服务器做图片服务器的方法

    这篇文章主要介绍了Docker安装运行apache2服务器做图片服务器的方法,需要的朋友可以参考下
    2017-06-06
  • docker仓库登录及配置insecure-registries的方法

    docker仓库登录及配置insecure-registries的方法

    这篇文章主要介绍了docker仓库登录配置insecure-registries的方法,docker客户端如果配置中添加了insecure-registary配置,就不需要在docker 客户端配置上对应证书,如果不配置要在/etc/docker/certs.d/目录中添加对应证书才能正常登录,感兴趣的朋友跟随小编一起看看吧
    2022-07-07
  • linux下如何使用docker安装minio

    linux下如何使用docker安装minio

    这篇文章主要介绍了linux下如何使用docker安装minio问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 讲解使用Docker搭建Java Web运行环境

    讲解使用Docker搭建Java Web运行环境

    本篇文章详细的介绍了使用Docker搭建Java Web运行环境,想要学习docker的同学可以了解一下。
    2016-11-11
  • docker批量启动关闭所有容器的操作

    docker批量启动关闭所有容器的操作

    这篇文章主要介绍了docker批量启动关闭所有容器的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用Docker快速部署Gitlab的方法

    使用Docker快速部署Gitlab的方法

    这篇文章主要介绍了使用Docker快速部署Gitlab的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Docker Compose构建Jenkins的实现

    Docker Compose构建Jenkins的实现

    本文主要介绍了Docker Compose构建Jenkins的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 群晖NAS利用Docker容器搭建KMS激活服务器实现激活windows系统和office(操作步骤)

    群晖NAS利用Docker容器搭建KMS激活服务器实现激活windows系统和office(操作步骤)

    本文跟大家分享一下如何利用群晖NAS的Docker容器套件搭建KMS服务器,并演示如何利用我们自己的KMS服务器激活Windows操作系统与Microsoft Office,感兴趣的朋友跟随小编一起看看吧
    2021-05-05

最新评论