Image Inspect

namkun·2022년 5월 7일
0

Docker & Kubernetes

목록 보기
8/16

우리가 만든 이미지에 대해서 내부가 어떻게 구성되어있는지에 대해 알고 싶다면 다음과 같은 명령어를 사용하면 된다.

$ 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 명령어가 크게 중요한건 아니지만, 그래도 이미지 안이 어떻게 구성되었는지 확인할 때는 좋은 것 같다..!

profile
개발하는 중국학과 사람

0개의 댓글