查询docker镜像的详细信息:
$ docker image inspect jwilder/nginx-proxy:latest
[
{
"Id": "sha256:a30f642c4477a306775daa76ec27ce3c04638f1e2e58e0a7e5155a090e7ceb72",
"RepoTags": [
"jwilder/nginx-proxy:latest"
],
"RepoDigests": [
"jwilder/nginx-proxy@sha256:96103e629e71a549c6003a01adc8ab43810014240776abfb2632e738f83ca8d5"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2024-08-05T00:03:50.935639279Z",
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.27.0",
"NJS_VERSION=0.8.4",
"NJS_RELEASE=2~bookworm",
"PKG_RELEASE=2~bookworm",
"NGINX_PROXY_VERSION=1.6.0-17-g83110b2",
"DOCKER_GEN_VERSION=",
"DOCKER_HOST=unix:///tmp/docker.sock"
],
"Cmd": [
"forego",
"start",
"-r"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app/",
"Entrypoint": [
"/app/docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>",
"org.opencontainers.image.authors": "Nicolas Duchon <nicolas.duchon@gmail.com> (@buchdag), Jason Wilder",
"org.opencontainers.image.created": "2024-08-12T00:03:25.049Z",
"org.opencontainers.image.description": "Automated nginx proxy for Docker containers using docker-gen",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "83110b24ef4f453149d464eda7536192c9a2863f",
"org.opencontainers.image.source": "https://github.com/nginx-proxy/nginx-proxy",
"org.opencontainers.image.title": "nginx-proxy",
"org.opencontainers.image.url": "https://github.com/nginx-proxy/nginx-proxy",
"org.opencontainers.image.version": "1.6.0-17-g83110b2"
},
"StopSignal": "SIGQUIT"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 205251279,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/a041727d5cbedc52acac058f1746dd02cad0c3216122623b5726c08f4738a4af/diff:/var/lib/docker/overlay2/7c988ab00944c1ccf044c6e7703f15da4f8d897c30d5b9b51b0539f2bb607e8c/diff:/var/lib/docker/overlay2/7d0288ff3d1a3bea286af12b40360c2ad70c7673ba9b5c5fec2a927f84cec232/diff:/var/lib/docker/overlay2/a7f5948d11eb25dd97ca90000dd4a214387d359215116a3547b3482eefbb69a2/diff:/var/lib/docker/overlay2/01174b03fb70176786536b4206aa8ce01138d994906af4d231f401efbde07f14/diff:/var/lib/docker/overlay2/31776373a1356d84a0d8a89931379eb0d981fac7ec44a819de99b48e5d73d3a5/diff:/var/lib/docker/overlay2/795876b2e5ad1b0a622e35a9f6cfc0d80fda6873544efe4c19b63e3b3f9d24f3/diff:/var/lib/docker/overlay2/7b760c31862f4658c93d7bbdc7974502b5694f991e080dd73c340679e22cb5ff/diff:/var/lib/docker/overlay2/564fba017b8a8276cb70e305d29c45104c37553470d04b6579750fcc83fc9eb3/diff:/var/lib/docker/overlay2/cb40640a1096a3349846ecb888f56ded8868510f75101211a9c1dfa2d5ede524/diff:/var/lib/docker/overlay2/675df3a43ee8a26f6902acdae3473ffd06e98c580eab37fbc98d81abc64c975c/diff:/var/lib/docker/overlay2/f08049773b2c5f3401fe64e56b6c155cd88e1583346ae3be654184e4d7b11738/diff",
"MergedDir": "/var/lib/docker/overlay2/47ca54da871b0d1e673a4b8c8909413dd68e32301980fe55ddd0e1952516588e/merged",
"UpperDir": "/var/lib/docker/overlay2/47ca54da871b0d1e673a4b8c8909413dd68e32301980fe55ddd0e1952516588e/diff",
"WorkDir": "/var/lib/docker/overlay2/47ca54da871b0d1e673a4b8c8909413dd68e32301980fe55ddd0e1952516588e/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:e0781bc8667fb5ebf954df4ae52997f6f5568ec9f07e21e5db7c9d324ed41e1f",
"sha256:fcfa12460e7d6c1aab3b455b464e912f8d6004ac94eab980ccf362978e17bdf7",
"sha256:a6355e7844d573a5978b972a7d15f5d64bfc34de68092d65be91409df71420c8",
"sha256:a39383416a22a6881d5e4dcbfe414067f8778aa4c5d3afd48e5662f610f05d83",
"sha256:09581b9299a2f52daec11dd77870844cb4cbd64bcae125fa93cc49f19b6deb72",
"sha256:599e8de62018ddc0638e0f88adff1f2b65e8c5e1bf5a60a2655669f95f353b96",
"sha256:60e72fbb314ed5a04c4d3f6ef808f4c142da0d06819aeda0e1790976f076beba",
"sha256:4695c0dc00f5a3bfca166ad89d1b348b4fe13a112d2c594d8a119a2878cc296e",
"sha256:b383c7787a780ae677c8ff2abd1d653bedc2c15a6927d3d031f7b8e6de1ed8c4",
"sha256:ad07f5d19538db489c4f383a684ef4a8738be6d69682418d5e5616fc66d4e754",
"sha256:d572154182c540b06bba69b1966cd5fe306e932bf7111310e202e945ebcc91e2",
"sha256:9f73e7ece324f39e534d70c1fe53ddbebe3e77cb7f0814c10d692dcb94ce35d2",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
或者:
$ docker inspect jwilder/nginx-proxy:latest --format='{{index .RepoDigests 0}}'
jwilder/nginx-proxy@sha256:96103e629e71a549c6003a01adc8ab43810014240776abfb2632e738f83ca8d5
可以在hub.docker下查找jwilder/nginx-proxy,然后找到 INDEX DIGEST 为sha256:96103e629e71a549c6003a01adc8ab43810014240776abfb2632e738f83ca8d5的镜像,不是列表下的 Digest, 那个相当于列表的id, 要点进去,详情里查看.
1.Id 是镜像对象的唯一标识
它是 Docker 引擎内部生成的一个哈希值,用来唯一标识存储在本地的镜像。
作用:
标识镜像的具体内容,包括其所有层和元数据。
Docker 引擎用它来快速查找和管理镜像。
计算依据:
基于镜像的所有层内容和元数据(如环境变量、标签等)计算的 SHA256 哈希值。
一旦镜像的内容发生变化(比如重新构建镜像或修改了元数据),Id 就会改变。
2.RepoDigests 是仓库中镜像的内容标识
它是镜像在远程仓库中的唯一标识,和 Id 不完全相同。
作用:
标识远程仓库中镜像的内容版本。
确保拉取的镜像内容一致性。
区别:
RepoDigests 是 镜像在仓库中的内容地址,而 Id 是本地 Docker 引擎中管理的镜像标识。
RepoDigests 包括镜像的名称(如 jwilder/nginx-proxy)和内容的 digest。
Id 不包含镜像名称。
3.RepoTags 指向镜像的仓库标签,通常为用户设置的可读性好的别名。如: jwilder/nginx-proxy:latest
总结
Id 是镜像的本地标识,用于 Docker 内部管理和操作。
RepoDigests 是镜像在远程仓库中的内容标识,用于确保一致性。
虽然它们都基于镜像内容生成哈希,但作用和适用场景不同:Id 更本地化,而 RepoDigests 更适用于远程一致性验证。
