docker buildx imagetools inspect 명령을 사용하여 이미지 세부 정보 검사 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker buildx imagetools inspect 명령을 사용하여 Docker 이미지의 상세 정보를 검사하는 방법을 배우게 됩니다. 단일 플랫폼 이미지와 멀티 플랫폼 이미지 모두를 검사하여 구성, 레이어 및 메타데이터를 확인하는 방법을 다룹니다.

또한 Go 템플릿을 사용하여 검사 결과의 형식을 지정하여 사용자 정의 보기를 만들고, 이미지의 원시 JSON 매니페스트를 표시하여 구조를 완벽하게 이해하는 방법도 배우게 됩니다.

단일 플랫폼 이미지 검사

이 단계에서는 docker image inspect 명령을 사용하여 단일 플랫폼 Docker 이미지를 검사하는 방법을 배우게 됩니다. 이 명령은 이미지의 구성, 레이어 및 메타데이터를 포함한 상세 정보를 제공합니다.

먼저, 간단한 단일 플랫폼 이미지를 가져와 보겠습니다. 이 예제에서는 hello-world 이미지를 사용합니다.

docker pull hello-world

이미지가 가져와지고 있음을 나타내는 출력을 볼 수 있습니다.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

이제 이미지가 있으므로 검사할 수 있습니다. 이미지 이름 뒤에 docker image inspect 명령을 사용합니다.

docker image inspect hello-world

이 명령은 hello-world 이미지에 대한 다양한 세부 정보를 포함하는 큰 JSON 객체를 출력합니다. 이미지 ID, 생성 날짜, 아키텍처, 운영 체제 및 구성을 볼 수 있습니다.

[
    {
        "Id": "sha256:...",
        "RepoTags": [
            "hello-world:latest"
        ],
        "RepoDigests": [
            "hello-world@sha256:..."
        ],
        "Parent": "",
        "Comment": "",
        "Created": "...",
        "Container": "...",
        "ContainerConfig": {
            ...
        },
        "DockerVersion": "...",
        "Author": "",
        "Config": {
            ...
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": ...,
        "VirtualSize": ...,
        "GraphDriver": {
            ...
        },
        "RootFS": {
            ...
        },
        "Metadata": {
            ...
        }
    }
]

출력은 단일 이미지를 검사하는 경우에도 JSON 배열입니다. 이는 명령이 여러 이미지 이름을 인수로 받을 수 있기 때문입니다.

멀티 플랫폼 이미지 검사

이 단계에서는 멀티 플랫폼 Docker 이미지를 검사하는 방법을 배우게 됩니다. 멀티 플랫폼 이미지는 서로 다른 아키텍처와 운영 체제에서 실행되도록 설계되었습니다. 멀티 플랫폼 이미지를 가져오면 Docker 는 시스템 아키텍처에 맞는 이미지를 자동으로 선택합니다.

멀티 플랫폼 이미지를 가져와 보겠습니다. 가벼운 Linux 배포판인 alpine 이미지를 사용합니다.

docker pull alpine

이전 단계와 유사한 출력을 볼 수 있으며, 이미지가 가져와지고 있음을 나타냅니다.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

이제 docker image inspect 명령을 사용하여 alpine 이미지를 검사해 보겠습니다.

docker image inspect alpine

출력은 다시 JSON 객체가 됩니다. ArchitectureOs 필드를 확인하십시오. 이는 특정 환경에 대해 가져온 이미지의 아키텍처와 운영 체제를 반영합니다.

[
    {
        "Id": "sha256:...",
        "RepoTags": [
            "alpine:latest"
        ],
        "RepoDigests": [
            "alpine@sha256:..."
        ],
        "Parent": "",
        "Comment": "",
        "Created": "...",
        "Container": "...",
        "ContainerConfig": {
            ...
        },
        "DockerVersion": "...",
        "Author": "",
        "Config": {
            ...
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": ...,
        "VirtualSize": ...,
        "GraphDriver": {
            ...
        },
        "RootFS": {
            ...
        },
        "Metadata": {
            ...
        }
    }
]

inspect 명령은 플랫폼에 대해 가져온 특정 이미지의 세부 정보를 보여주지만, 이 기본 보기에서는 이미지가 지원하는 모든 플랫폼에 대한 정보를 직접적으로 보여주지는 않습니다. 나중에 이미지 매니페스트에 대한 자세한 내용을 확인하는 방법을 살펴보겠습니다.

Go 템플릿을 사용하여 출력 형식 지정

이 단계에서는 Go 템플릿을 사용하여 docker image inspect 명령의 출력 형식을 지정하는 방법을 배우게 됩니다. 이를 통해 큰 JSON 출력에서 특정 정보 조각을 추출하여 더 읽기 쉬운 형식으로 표시할 수 있습니다.

docker image inspect 명령은 Go 템플릿 문자열을 인수로 사용하는 --format 플래그를 지원합니다. Go 템플릿을 사용하면 점 표기법을 사용하여 JSON 출력 내의 필드에 액세스할 수 있습니다.

alpine 이미지를 다시 검사해 보지만, 이번에는 이미지 ID 와 아키텍처만 표시하도록 출력을 형식 지정합니다.

docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}' alpine

이 명령에서 {{.Id}}Id 필드에 액세스하고 {{.Architecture}}는 JSON 출력에서 Architecture 필드에 액세스합니다.

가져온 이미지의 ID 와 아키텍처를 표시하는 다음과 유사한 출력을 볼 수 있습니다.

ID: sha256:..., Architecture: amd64

중첩된 필드에도 액세스할 수 있습니다. 예를 들어, 주 객체 내에 있는 운영 체제를 가져오려면 {{.Os}}를 사용합니다. ID, 아키텍처 및 운영 체제를 표시해 보겠습니다.

docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}, OS: {{.Os}}' alpine

이제 출력에 운영 체제가 포함됩니다.

ID: sha256:..., Architecture: amd64, OS: linux

Go 템플릿은 루프 및 조건문과 같은 더 고급 기능을 제공하지만, 필드의 간단한 추출에는 점 표기법으로 충분합니다. 이 형식 지정은 특정 이미지 속성을 기반으로 작업을 스크립팅해야 할 때 매우 유용합니다.

Raw JSON 매니페스트 표시

이 단계에서는 Docker 이미지의 원시 JSON 매니페스트를 보는 방법을 배우게 됩니다. 매니페스트는 멀티 플랫폼 이미지의 경우 레이어 및 서로 다른 아키텍처에 대한 구성을 포함하여 이미지에 대한 자세한 정보를 제공합니다.

원시 매니페스트를 보려면 docker manifest inspect 명령을 사용할 수 있습니다. 이 명령은 특히 멀티 플랫폼 이미지를 이해하는 데 유용합니다.

앞서 가져온 alpine 이미지의 매니페스트를 검사해 보겠습니다.

docker manifest inspect alpine

이 명령은 이미지 매니페스트를 나타내는 JSON 객체를 출력합니다. alpine과 같은 멀티 플랫폼 이미지의 경우 이 매니페스트는 "매니페스트 목록"(또는 "인덱스"라고도 함) 이 됩니다. 이 목록에는 지원되는 각 아키텍처에 대한 항목이 포함되어 있으며, 해당 아키텍처에 대한 특정 이미지 매니페스트를 가리킵니다.

다음과 유사한 출력을 볼 수 있습니다 (정확한 내용은 이미지 버전 및 Docker 설정에 따라 약간 다를 수 있음).

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": ...,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": ...,
         "digest": "sha256:...",
         "platform": {
            "architecture": "arm",
            "os": "linux",
            "variant": "v6"
         }
      },
      ...
   ]
}

manifests 배열에 주목하십시오. 이 배열의 각 객체는 특정 플랫폼 (아키텍처 및 OS) 에 대한 특정 이미지를 나타냅니다. 각 항목에 대한 아키텍처 및 운영 체제를 나타내는 platform 필드를 볼 수 있습니다. digest 필드는 해당 특정 플랫폼 이미지의 매니페스트에 대한 고유 식별자입니다.

이 원시 매니페스트는 멀티 플랫폼 이미지의 구조 방식을 더 깊이 이해하고 단일 태그 아래에서 사용 가능한 모든 다른 변형을 볼 수 있도록 합니다.

요약

이 랩에서는 docker image inspect 명령을 사용하여 Docker 이미지의 세부 정보를 검사하는 방법을 배웠습니다. 먼저 hello-world 이미지를 사용하여 단일 플랫폼 이미지를 검사하는 것으로 시작했으며, 이 명령이 이미지 ID, 아키텍처, OS 및 구성과 같은 정보를 포함하는 포괄적인 JSON 출력을 제공하는 방식을 확인했습니다.

그런 다음 멀티 플랫폼 이미지를 검사하는 것으로 이동하여 이러한 이미지에 대한 출력이 지원되는 서로 다른 플랫폼에 대한 세부 정보를 포함한다는 것을 이해했습니다. 마지막으로, 특정 정보를 추출하기 위해 Go 템플릿을 사용하여 출력을 형식화하는 방법과 이미지 구조를 더 자세히 살펴보기 위해 원시 JSON 매니페스트를 보는 방법을 살펴보았습니다.