docker manifest inspect 명령어를 사용하여 이미지 매니페스트 보기

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker manifest inspect 명령을 사용하여 이미지 매니페스트를 보는 방법을 배우게 됩니다. 먼저, 멀티 아키텍처 Docker 이미지, 특히 alpine 이미지를 풀링하여 Docker 가 서로 다른 아키텍처에서 이미지를 어떻게 처리하는지 이해하는 것으로 시작합니다.

이미지 풀링 후, docker manifest inspect를 사용하여 멀티 아키텍처 이미지와 관련된 매니페스트 목록을 검사합니다. 그런 다음 해당 목록 내의 특정 이미지 매니페스트를 자세히 검사하고, 마지막으로 docker manifest inspect 명령의 상세 출력 옵션을 탐색하여 이미지 매니페스트 세부 사항에 대한 포괄적인 이해를 얻습니다.

멀티 아키텍처 이미지 풀하기

이 단계에서는 멀티 아키텍처 Docker 이미지를 풀링하는 방법을 배우겠습니다. 멀티 아키텍처 이미지는 서로 다른 아키텍처 (예: amd64, arm64 등) 에서 사용할 수 있는 단일 이미지 태그입니다. 멀티 아키텍처 이미지를 풀링하면 Docker 는 시스템의 아키텍처에 맞는 올바른 이미지 레이어를 자동으로 선택합니다.

Docker 컨테이너에서 일반적으로 사용되는 경량 Linux 배포판인 alpine 이미지를 풀링합니다. alpine 이미지는 멀티 아키텍처 이미지로 사용할 수 있습니다.

alpine 이미지를 풀링하려면 터미널을 열고 다음 명령을 실행합니다.

docker pull alpine

이 명령은 Docker 에게 Docker Hub 에서 alpine 이미지의 최신 버전을 다운로드하도록 지시합니다. alpine은 멀티 아키텍처 이미지이므로 Docker 는 LabEx VM 의 아키텍처에 적합한 이미지 레이어를 다운로드합니다.

Docker 가 이미지를 풀링하고 있음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

Using default tag: latest
latest: Pulling from library/alpine
... (output showing download progress)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Digest 줄은 아키텍처에 대해 풀링된 특정 이미지 매니페스트의 고유 식별자를 보여줍니다.

명령이 완료되면 alpine 이미지가 LabEx VM 에서 사용 가능해지며 컨테이너를 실행하는 데 사용할 준비가 됩니다.

멀티 아키텍처 이미지의 매니페스트 목록 검사

이전 단계에서 alpine 이미지를 풀링했습니다. alpine은 멀티 아키텍처 이미지이므로 alpine:latest 태그는 실제로 매니페스트 목록을 참조합니다. 매니페스트 목록은 서로 다른 아키텍처 각각에 대한 이미지 매니페스트 목록입니다. 멀티 아키텍처 이미지를 풀링하면 Docker 는 매니페스트 목록을 사용하여 시스템에 맞는 올바른 이미지 매니페스트를 찾습니다.

alpine:latest 이미지의 매니페스트 목록을 보려면 docker manifest inspect 명령을 사용할 수 있습니다. 이 명령을 사용하면 이미지 매니페스트 또는 매니페스트 목록의 세부 정보를 볼 수 있습니다.

터미널에서 다음 명령을 실행합니다.

docker manifest inspect alpine:latest

이 명령은 alpine:latest 이미지의 매니페스트 목록을 나타내는 JSON 문서를 출력합니다. 출력은 서로 다른 아키텍처 (예: amd64, arm64, arm/v7 등) 에 해당하는 manifests 목록을 표시합니다. 목록의 각 매니페스트에는 platform (아키텍처 및 OS) 및 digest (해당 특정 아키텍처의 이미지 매니페스트에 대한 고유 식별자) 와 같은 세부 정보가 있습니다.

다음과 유사한 출력을 볼 수 있습니다 (정확한 다이제스트 및 매니페스트 수는 다를 수 있음).

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

이 출력은 alpine:latest가 실제로 다양한 아키텍처에 대한 매니페스트를 포함하는 매니페스트 목록임을 확인합니다. 이것이 멀티 아키텍처 태그를 사용할 때 Docker 가 시스템에 대해 어떤 특정 이미지를 풀링해야 하는지 아는 방법입니다.

목록 내 특정 이미지 매니페스트 검사

이전 단계에서 alpine:latest의 매니페스트 목록을 검사했습니다. 이 목록에는 여러 항목이 포함되어 있으며, 각 항목은 서로 다른 아키텍처에 대한 특정 이미지 매니페스트를 가리킵니다. 이제 이러한 특정 이미지 매니페스트 중 하나를 검사해 보겠습니다.

특정 매니페스트를 검사하려면 해당 다이제스트가 필요합니다. docker manifest inspect alpine:latest의 출력에서 LabEx VM (즉, amd64) 과 일치하는 아키텍처의 digest를 찾습니다. 다이제스트는 sha256:...과 유사하게 표시됩니다.

amd64 매니페스트의 다이제스트를 얻었으면 이미지 이름과 다이제스트를 @ 기호로 구분하여 docker manifest inspect 명령을 사용하여 검사할 수 있습니다.

YOUR_AMD64_DIGEST를 이전 단계의 출력에서 amd64 플랫폼에 대해 찾은 실제 다이제스트로 바꿉니다.

docker manifest inspect alpine@YOUR_AMD64_DIGEST

예를 들어, amd64 다이제스트가 sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227인 경우 명령은 다음과 같습니다.

docker manifest inspect alpine@sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227

이 명령은 amd64 아키텍처에 대한 특정 이미지 매니페스트를 나타내는 JSON 문서를 출력합니다. 이 매니페스트에는 이미지 레이어 (다이제스트로 식별됨) 및 이미지 구성 (또한 다이제스트로 식별됨) 에 대한 세부 정보가 포함되어 있습니다.

다음과 유사한 출력을 볼 수 있습니다.

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:..."
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 2803897,
      "digest": "sha256:..."
    }
  ]
}

이 출력은 해당 특정 아키텍처에 대한 이미지를 구성하는 구성 및 레이어를 나열하여 단일 이미지 매니페스트의 구조를 보여줍니다.

자세한 출력과 함께 매니페스트 검사

이전 단계에서 매니페스트 목록과 특정 이미지 매니페스트를 검사했습니다. docker manifest inspect의 기본 출력은 매니페스트 또는 매니페스트 목록의 요약을 제공합니다. 이미지의 전체 구성을 포함한 더 자세한 정보를 얻으려면 --verbose 플래그를 사용할 수 있습니다.

alpine:latest의 매니페스트 목록을 다시 검사해 보지만, 이번에는 --verbose 플래그를 사용합니다. 이렇게 하면 매니페스트 목록이 표시되고 목록의 각 매니페스트에 대해 전체 구성 세부 정보도 표시됩니다.

터미널에서 다음 명령을 실행합니다.

docker manifest inspect --verbose alpine:latest

이 명령은 더 광범위한 JSON 문서를 출력합니다. manifests 목록의 각 항목에 대해 이제 Config라는 추가 필드가 표시됩니다. 이 Config 필드에는 해당 특정 아키텍처에 대한 이미지의 전체 구성이 포함되어 있으며, 여기에는 entrypoint, command, 환경 변수, 작업 디렉토리 등이 포함됩니다.

다음과 유사한 출력을 볼 수 있습니다 ( Config 섹션의 정확한 세부 정보는 다를 수 있음).

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         },
         "Config": {
            "Env": [
               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Entrypoint": [
               "/bin/sh"
            ],
            "Cmd": null,
            "WorkingDir": "/",
            ...
         }
      },
      ...
   ]
}

--verbose 플래그를 사용하면 매니페스트 목록 내 이미지의 자세한 구성을 확인해야 할 때 유용하며, 이는 특정 이미지의 설정 방식을 디버깅하거나 이해하는 데 도움이 될 수 있습니다.

요약

이 랩에서는 docker manifest inspect 명령을 사용하여 이미지 매니페스트를 보는 방법을 배웠습니다. 먼저, 단일 태그가 서로 다른 아키텍처의 이미지를 나타낼 수 있다는 것을 이해하면서, 멀티 아키텍처 이미지인 alpine을 가져오는 것으로 시작했습니다.

그런 다음 docker manifest inspect를 사용하여 멀티 아키텍처 이미지와 관련된 매니페스트 목록을 보았습니다. 이 목록은 다양한 아키텍처에 사용할 수 있는 이미지 매니페스트를 자세히 설명합니다. 마지막으로, 목록 내에서 특정 이미지 매니페스트를 검사하는 방법과 상세 출력 옵션을 사용하여 더 자세한 정보를 얻는 방법을 살펴보았습니다.