【Docker】查看每层镜像的大小

CSDN 2024-06-12 10:07:13 阅读 95

👨‍🎓博主简介

🏅云计算领域优质创作者

🏅华为云开发者社区专家博主

🏅阿里云开发者社区专家博主

💊交流社区:运维交流社区 欢迎大家的加入!

🐋 希望大家多多支持,我们一起进步!😄

🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

docker history image附加:不看

docker history image

使用docker history image(镜像名)可以看到构建镜像时每条命令执行的大小

这里显示的是所有层的信息;

如果看命令不知道是哪个的时候,可根据在build镜像时的IMAGE来判断是哪个。

[root@localhost mysql]# docker history redhat-mysqlIMAGE CREATED CREATED BY SIZE COMMENTcf14a9a9f753 4 days ago /bin/sh -c #(nop) CMD ["mysqld"] 0B 312a16d871a0 4 days ago /bin/sh -c #(nop) EXPOSE 3306 0B 372e0847f04a 4 days ago /bin/sh -c mysqld --initialize-insecure --us… 127MB 3f40e557ffcf 4 days ago /bin/sh -c #(nop) ENV PATH=/opt/mysql-5.7.3… 0B cec92708a0d1 4 days ago /bin/sh -c #(nop) COPY file:c21e035f53b78962… 162B b904f83aa22c 4 days ago /bin/sh -c chown -R mysql:mysql /opt/mysql-5… 2.68GB 62c02bad85d5 4 days ago /bin/sh -c groupadd mysql && useradd -r -g m… 359kB 789b6d170caf 4 days ago /bin/sh -c #(nop) ADD file:41225123e9b5895c2… 2.68GB 978bac9547fa 4 days ago /bin/sh -c yum install -y libaio numactl 66.1MB 069661fe1d9a 4 days ago /bin/sh -c #(nop) ENV LANG=en_US.utf8 0B 8d7d859c98e3 5 days ago /bin/bash 319MB 9da37a681956 3 years ago 2.94kB <missing> 3 years ago 205MB Imported from -

如果我只要显示CREATED BY和每层的大小,那么可以使用:--format='{ {.CreatedBy}} - { {.Size}}'

[root@localhost mysql]# docker history --format='{ {.CreatedBy}} - { {.Size}}' redhat-mysql/bin/sh -c #(nop) CMD ["mysqld"] - 0B/bin/sh -c #(nop) EXPOSE 3306 - 0B/bin/sh -c mysqld --initialize-insecure --us… - 127MB/bin/sh -c #(nop) ENV PATH=/opt/mysql-5.7.3… - 0B/bin/sh -c #(nop) COPY file:c21e035f53b78962… - 162B/bin/sh -c chown -R mysql:mysql /opt/mysql-5… - 2.68GB/bin/sh -c groupadd mysql && useradd -r -g m… - 359kB/bin/sh -c #(nop) ADD file:41225123e9b5895c2… - 2.68GB/bin/sh -c yum install -y libaio numactl - 66.1MB/bin/sh -c #(nop) ENV LANG=en_US.utf8 - 0B/bin/bash - 319MB - 2.94kB - 205MB

附加:不看

简介

通过使用容器化,我们可以快速设置和配置我们的部署环境,这有助于我们节省时间和资源。考虑到 “一次编写,随地部署 “的目标,容器化可以帮助我们简化现代应用程序的部署过程,而这可能是复杂的。

寻找Docker镜像的层和层大小

在这篇文章中,我们将探讨如何找到每个Docker镜像的层和层大小。这对于识别可能导致镜像整体大小的大型层,以及确定哪些层可以被删除或优化以减少镜像的大小是非常有用的。

方法

使用Dockerfile

使用Docker Image Inspect命令

让我们详细了解其中的每一项,并通过实例看到它们的作用。

使用Dockerfile

示例

第1步 – 为你的项目创建一个新的目录,并导航到该目录 —

$ mkdir directoryname $ cd directoryname

第2步 – 在这个新目录下制作一个名为 “Dockerfile “的文件,内容如下 —

FROM alpine:latest RUN apk add --no-cache curl

这包括建立你的图像的说明以及基本图像。

第3步 – 在终端运行docker build命令,使用Dockerfile构建镜像—-。

docker build -t myimage .

第4步 – 要检查图层和图层大小,在终端运行docker images命令,列出系统中所有可用的图像–

docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmyimage latest 499a9ddb3acd 2 minutes ago 9.29MBdocker-apps latest eb6dda32a60d 3 hours ago 176MBdocker101tutorial latest 1ebfcd22ec64 3 hours ago 47MBubuntu latest 6b7dfa7e8fdb 4 weeks ago 77.8MBalpine/git latest 22d84a66cda4 7 weeks ago 43.6MB

第5步 – 在终端运行docker inspect命令来检查镜像并获得其细节,包括层和它们的大小。

docker inspect IMAGE_ID

docker inspect 499a9ddb3acd[ { "Id": "sha256:499a9ddb3acdf2117fdb4df826e0782d05d01aa8d1c0574c96e7bed6fbbcf698", "RepoTags": [ "myimage:latest" ], "RepoDigests": [], "Parent": "", "Comment": "buildkit.dockerfile.v0", "Created": "2023-01-08T07:49:58.294267525Z", "Container": "", "ContainerConfig": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": null, "Image": "", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "DockerVersion": "", "Author": "", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh" ], "Image": "", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 9292948, "VirtualSize": 9292948, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/e4c1f1bb76c66c5d1781a775c8a2ca9338065ea0b398aeaed4230a00a15d2952/diff", "MergedDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/merged", "UpperDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/diff", "WorkDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf", "sha256:19bc0373c06b6727c115ef34961486b1a9f3b7c8ccbd3441c4b108aeef2b338d" ] }, "Metadata": { "LastTagTime": "2023-01-08T07:49:58.412703277Z" } }]

使用Docker Image Inspect命令

“docker image inspect “命令允许我们探索关于Docker镜像的全面细节,比如它的层数和大小。

下面的步骤可以用来获得Docker镜像的层和层大小——。

第1步 – 通过打开终端或命令提示符,进入包含你的Docker镜像的目录。

第2步 – 要查看所有可访问的Docker镜像,请在终端运行以下命令 —

docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEmyimage latest 499a9ddb3acd 17 minutes ago 9.29MBdocker-apps latest eb6dda32a60d 3 hours ago 176MBdocker101tutorial latest 1ebfcd22ec64 3 hours ago 47MBubuntu latest 6b7dfa7e8fdb 4 weeks ago 77.8MBalpine/git latest 22d84a66cda4 7 weeks ago 43.6MB

第3步 – 选择你想检查的图像,并记下你之前输出的ID。在这个例子中,我们将利用ID为 “499a9ddb3acd “的图像。

第4步

docker image inspect 499a9ddb3acd[ { "Id": "sha256:499a9ddb3acdf2117fdb4df826e0782d05d01aa8d1c0574c96e7bed6fbbcf698", "RepoTags": [ "myimage:latest" ], "RepoDigests": [], "Parent": "", "Comment": "buildkit.dockerfile.v0", "Created": "2023-01-08T07:49:58.294267525Z", "Container": "", "ContainerConfig": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": null, "Image": "", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "DockerVersion": "", "Author": "", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh" ], "Image": "", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 9292948, "VirtualSize": 9292948, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/e4c1f1bb76c66c5d1781a775c8a2ca9338065ea0b398aeaed4230a00a15d2952/diff", "MergedDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/merged", "UpperDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/diff", "WorkDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf", "sha256:19bc0373c06b6727c115ef34961486b1a9f3b7c8ccbd3441c4b108aeef2b338d" ] }, "Metadata": { "LastTagTime": "2023-01-08T07:49:58.412703277Z" } }]

第5步 – 输出将是一个JSON对象,包含关于图像的详细信息,包括它的图层和图层在终端的大小。

在终端的输出中会产生一个图像的层和它们的尺寸的列表。

docker image inspect --format='{ {json .RootFS.Layers}}' 499a9ddb3acd["sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf","sha256:19bc0373c06b6727c115ef34961486b1a9f3b7c8ccbd3441c4b108aeef2b338d"] 结论

在这篇文章中,我们探讨了寻找每个Docker镜像的层和层大小的各种方法。通过使用Dockerfile方法,我们可以通过检查用于构建镜像的指令来查看层和大小。Docker历史命令允许我们查看镜像的历史,并看到层和它们的大小。Docker图像检查命令也提供了关于图像的层和大小的详细信息。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。