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


    👨‍🎓博主简介

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


    docker history image

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

    这里显示的是所有层的信息;
    如果看命令不知道是哪个的时候,可根据在build镜像时的IMAGE来判断是哪个。

    [root@localhost mysql]# docker history redhat-mysql
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    cf14a9a9f753        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 -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    如果我只要显示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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    附加:不看

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

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

    • 方法
      使用Dockerfile

    使用Docker Image Inspect命令

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

    • 使用Dockerfile
      示例

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

    $ mkdir directoryname 
    $ cd directoryname
    
    • 1
    • 2

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

    FROM alpine:latest 
    RUN apk add --no-cache curl
    
    • 1
    • 2

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

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

    docker build -t myimage .
    
    • 1

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

    docker images
    REPOSITORY        TAG      IMAGE ID       CREATED        SIZE
    myimage           latest   499a9ddb3acd   2 minutes ago  9.29MB
    docker-apps       latest   eb6dda32a60d   3 hours ago    176MB
    docker101tutorial latest   1ebfcd22ec64   3 hours ago    47MB
    ubuntu            latest   6b7dfa7e8fdb   4 weeks ago    77.8MB
    alpine/git        latest   22d84a66cda4   7 weeks ago    43.6MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    docker inspect IMAGE_ID
    
    • 1
    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"
          }
       }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

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

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

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

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

    docker image ls
    REPOSITORY         TAG     IMAGE ID       CREATED           SIZE
    myimage           latest   499a9ddb3acd   17 minutes ago    9.29MB
    docker-apps       latest   eb6dda32a60d   3 hours ago       176MB
    docker101tutorial latest   1ebfcd22ec64   3 hours ago       47MB
    ubuntu            latest   6b7dfa7e8fdb   4 weeks ago       77.8MB
    alpine/git        latest   22d84a66cda4   7 weeks ago       43.6MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    第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"
          }
       }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    第5步 – 输出将是一个JSON对象,包含关于图像的详细信息,包括它的图层和图层在终端的大小。
    在终端的输出中会产生一个图像的层和它们的尺寸的列表。

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

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

  • 相关阅读:
    【数据结构初阶】六、线性表中的队列(C语言 -- 链式结构实现队列)
    NFS性能瓶颈分析
    React基础-React中发送Ajax请求以及Mock数据
    瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件
    MySQL数据库八股文
    安服-windows&linux日志分析
    支付官方解析
    [附源码]计算机毕业设计springboot面包连锁店管理系统
    数组、二维数组及数组的排序(JAVA基础二)
    Redis学习笔记9
  • 原文地址:https://blog.csdn.net/liu_chen_yang/article/details/132692829