如何查找每个Docker镜像的层和层大小
简介
通过使用容器化,我们可以快速设置和配置我们的部署环境,这有助于我们节省时间和资源。考虑到 “一次编写,随地部署 “的目标,容器化可以帮助我们简化现代应用程序的部署过程,而这可能是复杂的。
寻找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 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历史命令允许我们查看镜像的历史,并看到层和它们的大小。Docker图像检查命令也提供了关于图像的层和大小的详细信息。