转载请注明出处:
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:介绍镜像的名字、占用空间、镜像中未使用的文件和重复使用文件的大小、镜像使用效率(未使用的文件和重复使用文件的大小/镜像占用总空间)