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启动nginx无法访问的问题解决

    docker启动nginx无法访问的问题解决

    本文主要介绍了docker启动nginx无法访问的问题解决,主要遇到404错误,问题原因是配置文件路径错误和权限问题,下面就来具体介绍一下问题解决,感兴趣的可以了解一下
    2025-02-02
  • 一篇文章学会Docker命令小结

    一篇文章学会Docker命令小结

    这篇文章主要介绍了一篇文章学会Docker命令小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Ceph集群Docker容器化部署过程

    Ceph集群Docker容器化部署过程

    这篇文章主要介绍了Ceph集群Docker容器化部署过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 前端实现自动化部署docker+Jenkins的完整过程

    前端实现自动化部署docker+Jenkins的完整过程

    在现代前端开发中自动化部署变得越来越重要,通过使用Docker、Jenkins和Nginx,我们可以实现高效的前端自动化部署,这篇文章主要介绍了前端实现自动化部署docker+Jenkins的完整过程,需要的朋友可以参考下
    2025-07-07
  • docker容器分配固定ip的实现示例

    docker容器分配固定ip的实现示例

    如果不固定ip,每次主机重启后,docker会动态给容器分配ip,导致redis容器的IP自动换了 ,然后还得去改配置就很烦,本文主要介绍了docker容器分配固定ip的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 基于 Docker 搭建 Anythingllm的详细过程

    基于 Docker 搭建 Anythingllm的详细过程

    本文详细介绍了如何在本地Windows 11企业版上使用Docker搭建和部署Anythingllm,包括Ollama和Docker的安装步骤,以及配置和使用Anythinllm的具体方法,感兴趣的朋友一起看看吧
    2025-03-03
  • docker+ddns实现动态域名的示例代码

    docker+ddns实现动态域名的示例代码

    本文主要介绍了Docker使用ddns-go实现动态域名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 用Docker部署Fenrus导航页:打造专属的极简高效浏览器首页

    用Docker部署Fenrus导航页:打造专属的极简高效浏览器首页

    该文章介绍了使用Fenrus和cpolar搭建个性化的浏览器首页的方法,包括使用Docker部署Fenrus、配置cpolar实现公网访问等步骤,并详细阐述了部署过程和使用方法,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • docker创建镜像并上传云端服务器的实现示例

    docker创建镜像并上传云端服务器的实现示例

    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,本文介绍了如何使用Docker创建镜像,并将其上传到云端,感兴趣的可以了解一下
    2023-08-08
  • Docker Volumn容器间共享数据的实现

    Docker Volumn容器间共享数据的实现

    这篇文章主要介绍了Docker Volumn容器间共享数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论