已有docker镜像构建过程分析

转载请注明出处:

1.使用docker history进行分析

docker history 命令用于查看指定镜像的历史层信息,它显示了镜像创建过程中的每一层,包括创建时间、创建者、大小和注释等信息。

查看镜像历史

复制代码
docker history myimage:latest

使用示例:

复制代码
root@controller1:~# docker images | grep zj_jdk_test_3
zj_jdk_test_3                                                     latest                                        623478971aeb        8 weeks ago         280MB
root@controller1:~#
root@controller1:~#
root@controller1:~#
root@controller1:~#
root@controller1:~# docker history 623478971aeb
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
623478971aeb        8 weeks ago         /bin/sh -c set -x &&     sed -i 's#deb.debia...   20.2MB
b427061b275f        2 years ago         /bin/sh -c set -eux;   arch="$(dpkg --print-...   108MB
<missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_VERSION=8u342       0B
<missing>           2 years ago         /bin/sh -c #(nop)  ENV LANG=C.UTF-8             0B
<missing>           2 years ago         /bin/sh -c #(nop)  ENV PATH=/usr/local/openj...   0B
<missing>           2 years ago         /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J...   27B
<missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/local/...   0B
<missing>           2 years ago         /bin/sh -c set -eux;  apt-get update;  apt-g...   11.5MB
<missing>           2 years ago         /bin/sh -c set -ex;  if ! command -v gpg > /...   16.5MB
<missing>           2 years ago         /bin/sh -c set -eux;  apt-get update;  apt-g...   15.9MB
<missing>           2 years ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           2 years ago         /bin/sh -c #(nop) ADD file:dfd7e3791fa0512f0...   108MB
root@controller1:~#

显示完整输出

复制代码
docker history --no-trunc myimage:latest
  • 镜像历史信息包括每一层的创建指令和大小,有助于了解镜像的构建过程和内容。

2.使用dive进行分析

Dive 的主要功能:

  • 分层分析:查看 Docker 镜像的每一层,了解每层的文件及其占用的空间。
  • 空间利用率:计算镜像中有效空间的占比,给出效率评分。
  • 浪费空间检测:识别重复文件、未使用的依赖或冗余数据。
  • 手动优化建议:根据分析结果手动调整 Dockerfile 以优化镜像大小。

安装 dive

复制代码
docker pull wagoodman/dive:latest
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest <your_image>

启动之后:

复制代码
root@controller1:~# docker images | grep dive
wagoodman/dive                                                    latest                                        cf2f0c72f085        10 months ago       51.7MB
root@controller1:~#

或者通过以下命令安装:

复制代码
snap install dive

通过以下命令来分析 Docker 镜像:

复制代码
dive nginx:latest

运行后效果如图:

启动 dive 后,分为两部分:

左侧(层结构):展示 Docker 镜像的每一层,显示每一层的命令(如 COPY、RUN)和镜像层的大小。可以通过上下箭头在不同层之间切换。

右侧(文件系统内容):展示每一层中具体添加、修改或删除的文件和目录。你可以看到镜像每一层对文件系统的影响,以及文件变化和大小。

Layer Details:介绍了这一层的命令

Images Details:介绍镜像的名字、占用空间、镜像中未使用的文件和重复使用文件的大小、镜像使用效率(未使用的文件和重复使用文件的大小/镜像占用总空间)

相关推荐
Narutolxy3 小时前
Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析20250309
运维·ubuntu·docker
Yuanymoon5 小时前
【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】
java·docker·jenkins·harbor·devops
dleei7 小时前
使用docker创建gitlab仓库
前端·docker·gitlab
Hellc00710 小时前
使用 Docker 部署 RabbitMQ 并实现数据持久化
docker·rabbitmq·ruby
梦游钓鱼10 小时前
在window终端创建docker容器的问题
运维·docker·容器
钢板兽11 小时前
Java后端高频面经——JVM、Linux、Git、Docker
java·linux·jvm·git·后端·docker·面试
梵法利亚14 小时前
Ubuntu-docker安装mysql
mysql·ubuntu·docker
猴的哥儿18 小时前
Ubuntu 22.04 LTS 入门教学文档
linux·运维·ubuntu·docker
Macle_Chen1 天前
Mac服务器上创建Docker并安装宝塔环境
服务器·macos·docker
ChinaRainbowSea1 天前
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
java·linux·运维·服务器·docker·架构