如何查找每个 Docker 镜像的层和层大小?


简介

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

查找 Docker 镜像的层和层大小

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

方法

我们可以使用以下技术来确定每个 Docker 镜像的层和层大小:

  • 使用 Dockerfile

  • 使用 Docker Image Inspect 命令

让我们详细了解每个方法,并通过示例查看它们的操作。

使用 Dockerfile

使用 Dockerfile 方法,您可以执行以下操作来确定每个 Docker 镜像的层和层大小:

示例

步骤 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 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

步骤 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 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

步骤 3 - 选择您要检查的镜像,并记下其在先前输出中的 ID。在本例中,我们将使用 ID 为“499a9ddb3acd”的镜像。

步骤 4 - 在终端中运行以下命令以检查镜像:

docker image inspect 499a9ddb3acd

输出

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 history 命令允许我们查看镜像的历史记录并查看层及其大小。Docker image inspect 命令还提供有关镜像的层和大小的详细信息。

更新于: 2023年1月17日

7K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告