👨🎓博主简介
🏅云计算领域优质创作者
🏅华为云开发者社区专家博主
🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗
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 -
如果我只要显示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 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
[
{
"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图像检查命令也提供了关于图像的层和大小的详细信息。