当前位置:首页 » 《资源分享》 » 正文

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

3 人参与  2024年04月14日 10:55  分类 : 《资源分享》  评论

点击全文阅读


?‍?博主简介

  ?云计算领域优质创作者
  ?华为云开发者社区专家博主
  ?阿里云开发者社区专家博主
?交流社区:运维交流社区 欢迎大家的加入!
? 希望大家多多支持,我们一起进步!?
?如果文章对你有帮助的话,欢迎 点赞 ?? 评论 ? 收藏 ⭐️ 加关注+?


文章目录

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图像检查命令也提供了关于图像的层和大小的详细信息。


点击全文阅读


本文链接:http://zhangshiyu.com/post/95116.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1