如何查找每个 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 命令还提供有关镜像的层和大小的详细信息。