우리가 만든 이미지에 대해서 내부가 어떻게 구성되어있는지에 대해 알고 싶다면 다음과 같은 명령어를 사용하면 된다.
$ docker image inspect [image id]
해당 명령어를 입력하면 이미지가 어떻게 구성되었는지 알 수 있는데, 우리가 기존에 사용했던 이미지를 기반으로 해서 확인해보자.
$ docker image inspect a79f50098489
[
{
"Id": "sha256:a79f50098489326f784eef6b51f66fc66dea00bc40ab5fba34672685dedd2c13",
"RepoTags": [],
"RepoDigests": [],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2022-04-30T07:42:36.1621971Z",
"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,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=18.0.0",
"YARN_VERSION=1.22.18"
],
"Cmd": [
"node",
"server.js"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1001414775,
"VirtualSize": 1001414775,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/8c6tek8xskmq0h75e5051r7um/diff:/var/lib/docker/overlay2/in1f0s52pmoxvxkydugio06yg/diff:/var/lib/docker/overlay2/t83y486sd9ewf06y0hia7m5ip/diff:/var/lib/docker/overlay2/9d8b47416c34188768b19d032230f863476f3a506b10fccd22ea744c25d4aa43/diff:/var/lib/docker/overlay2/9c44fa63505323d622c4ed3fe52cbd76be38c38eea1678d422f00cfc325c305f/diff:/var/lib/docker/overlay2/aa6089559db4494a38be4a67fb33b8bdcbb273d22c987ecec5991853a1c63d35/diff:/var/lib/docker/overlay2/d4da968c150c968cffe02cecbf5b7733f39ba3054304b31181a5bda451cb6c18/diff:/var/lib/docker/overlay2/424d53484d79e4537785ddc06ea1d3895bece727b968587af779178eb2841df5/diff:/var/lib/docker/overlay2/77d3d17d04b9f7ca0d95411f18e61f3d88a97cc98c9bb7db3fb84ed53fd9c00c/diff:/var/lib/docker/overlay2/f00cac40b41bbb608455d3eb64f787d7a093241c1bb680a66b6254a354b9dcb2/diff:/var/lib/docker/overlay2/ce35730bd086579465f40faba611956f3e777fccfc44a54beb747984cc22c0fc/diff:/var/lib/docker/overlay2/b34d6d970f0f599c6ce4981d57c3031e3f6708fadd2331c41692ef499981e60a/diff",
"MergedDir": "/var/lib/docker/overlay2/fq2lx4oszfxx5qeh5f61ppstv/merged",
"UpperDir": "/var/lib/docker/overlay2/fq2lx4oszfxx5qeh5f61ppstv/diff",
"WorkDir": "/var/lib/docker/overlay2/fq2lx4oszfxx5qeh5f61ppstv/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:a13c519c6361b881ba38a452d05e130fc2ee26f0849f119936d747b96cf6a5c3",
"sha256:bafdbe68e4aee5999c326aaa33571b595d6bfbea119742439588c3e0c1a56130",
"sha256:a037458de4e074da622d972e28cfa275c246c684e06efdd28d39c0faa45cb633",
"sha256:08fa02ce37ebdcd0029cf499ca859e0dc488d7725499063baf4481681e6da7ef",
"sha256:5bdcc8e2060c976a390966445e46453b29dfb5e1860a3b96ded020a924472dc0",
"sha256:78d9c6989ad1034568c7e0eaf5a6efa463e3a07111ebf33fd0b5a99654ae3a23",
"sha256:9e01c2c7216e365743513b738a9e458b518db8787d3024407a536d5bc41c5d09",
"sha256:fef4baf488014a1557cd120fe6d56040a5d5a845f472b350a7609c4668110ad8",
"sha256:adcd0466d8b3275549b226f0a0654aad190a4cdc18e59d75411c80e35ee94e14",
"sha256:059c28efada67449618c53f63bf891a86b54c4f69d6caae44866bc3efe3b762d",
"sha256:cfc9004fc71d45e6c4632896358f861d2f73b073714ca2f5040c400153b2fb9d",
"sha256:09948b4e0ad8061a86b738e693defa02e3be70f71bc469fdde955291783d5eb0",
"sha256:e659f229807e6a2c274cfc821306d1362ac916c6c7f9fa310fb04a5ad85ab159"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
뭔가 길게 나왔다.
자세히 보면
"Created": "2022-04-30T07:42:36.1621971Z",
우리가 이 이미지를 언제 빌드했는지,
"ExposedPorts": {
"80/tcp": {}
},
어떤 포트에 대해서 노출할 것인지,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=18.0.0",
"YARN_VERSION=1.22.18"
],
내부 환경은 어떤 환경인지,
"Os": "linux",
어떤 os 를 사용하였는지 알 수 있으며,
앞서 말한 레이어에 대한 정보도 다음과 같이 확인할 수 있다.
"Layers": [
"sha256:a13c519c6361b881ba38a452d05e130fc2ee26f0849f119936d747b96cf6a5c3",
"sha256:bafdbe68e4aee5999c326aaa33571b595d6bfbea119742439588c3e0c1a56130",
"sha256:a037458de4e074da622d972e28cfa275c246c684e06efdd28d39c0faa45cb633",
"sha256:08fa02ce37ebdcd0029cf499ca859e0dc488d7725499063baf4481681e6da7ef",
"sha256:5bdcc8e2060c976a390966445e46453b29dfb5e1860a3b96ded020a924472dc0",
"sha256:78d9c6989ad1034568c7e0eaf5a6efa463e3a07111ebf33fd0b5a99654ae3a23",
"sha256:9e01c2c7216e365743513b738a9e458b518db8787d3024407a536d5bc41c5d09",
"sha256:fef4baf488014a1557cd120fe6d56040a5d5a845f472b350a7609c4668110ad8",
"sha256:adcd0466d8b3275549b226f0a0654aad190a4cdc18e59d75411c80e35ee94e14",
"sha256:059c28efada67449618c53f63bf891a86b54c4f69d6caae44866bc3efe3b762d",
"sha256:cfc9004fc71d45e6c4632896358f861d2f73b073714ca2f5040c400153b2fb9d",
"sha256:09948b4e0ad8061a86b738e693defa02e3be70f71bc469fdde955291783d5eb0",
"sha256:e659f229807e6a2c274cfc821306d1362ac916c6c7f9fa310fb04a5ad85ab159"
]
그런데 뭔가 이상한게 있다면...도커 파일에 지정한 명령어만큼 레이어가 생성되어야 하는데, 우리가 지정한 명령어 개수보다 레이어수가 더 많은 것을 알 수 있다.
그 이유는 도커파일에 정의된 레이어에만 국한되지 않고, 예를 들면 노드 기본 이미지에 의해 제공되는 레이어나 그런것들도 모두 포함되기 때문이다.
사실 inspect 명령어가 크게 중요한건 아니지만, 그래도 이미지 안이 어떻게 구성되었는지 확인할 때는 좋은 것 같다..!