Docker 이미지 inspect 명령으로 이미지 세부 정보 확인 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker image inspect 명령을 사용하여 Docker 이미지에 대한 자세한 정보를 확인하는 방법을 배우게 됩니다. 먼저 샘플 이미지를 pull 하는 것으로 시작합니다. 그런 다음, 기본 출력 형식, JSON 형식, 그리고 특정 세부 정보를 추출하기 위한 사용자 지정 Go 템플릿을 사용하여 이미지를 검사하는 방법을 살펴봅니다. 이 실습을 통해 Docker 이미지의 특성과 구성을 효과적으로 검사하는 기술을 습득할 수 있습니다.

샘플 이미지 가져오기 (Pull)

이 단계에서는 레지스트리에서 Docker 이미지를 pull 하는 방법을 배우게 됩니다. Docker 이미지는 컨테이너의 구성 요소입니다. 이는 애플리케이션 코드, 라이브러리, 종속성 및 애플리케이션 실행에 필요한 구성 파일을 포함하는 읽기 전용 템플릿입니다.

이미지를 pull 하려면 docker pull 명령을 사용하고 그 뒤에 이미지 이름을 입력합니다. 태그를 지정하지 않으면 Docker 는 기본적으로 latest 태그를 pull 합니다.

Docker 가 올바르게 설치되었는지 테스트하는 데 사용되는 매우 작은 이미지인 hello-world 이미지를 pull 해 보겠습니다.

docker pull hello-world

이미지가 다운로드되고 있음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

이 출력은 Docker 가 Docker Hub 레지스트리 (기본 레지스트리) 에서 hello-world 이미지의 latest 태그를 pull 하고 있음을 보여줍니다. Pull complete가 있는 줄은 이미지의 서로 다른 레이어가 다운로드되었음을 나타냅니다.

기본 형식으로 이미지 검사 (Inspect)

이 단계에서는 Docker 이미지를 검사하여 이미지에 대한 자세한 정보를 확인하는 방법을 배우게 됩니다. docker inspect 명령은 이미지, 컨테이너, 네트워크 및 볼륨을 포함한 Docker 객체에 대한 풍부한 정보를 제공합니다. 기본적으로 구조화된 형식으로 정보를 출력합니다.

이미지를 검사하려면 docker inspect 명령을 사용하고 그 뒤에 이미지 이름 또는 ID 를 입력합니다. 이전 단계에서 pull 한 hello-world 이미지를 검사해 보겠습니다.

docker inspect hello-world

이 명령은 hello-world 이미지에 대한 많은 정보를 기본 형식으로 출력합니다. 출력에는 이미지 ID, 생성 날짜, 아키텍처, 운영 체제 및 구성과 같은 세부 정보가 포함됩니다.

[
  {
    "Id": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
    "RepoTags": ["hello-world:latest"],
    "RepoDigests": [
      "hello-world@sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591"
    ],
    "Parent": "",
    "Comment": "",
    "Created": "2023-03-07T21:50:09.004511104Z",
    "Container": "a928b81f51a91111111111111111111111111111111111111111111111111111",
    "ContainerConfig": {
      "Hostname": "a928b81f51a9",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": {}
    },
    "DockerVersion": "20.10.21",
    "Author": "",
    "Config": {
      "Hostname": "",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": null
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Size": 1330,
    "VirtualSize": 1330,
    "GraphDriver": {
      "Data": null,
      "Name": "overlay2"
    },
    "RootFS": {
      "Type": "layers",
      "Layers": [
        "sha256:2db29710123e5455b34e722505b562504b39e55355e344405b54d3153a94650b"
      ]
    },
    "Metadata": {
      "LastTagTime": "0001-01-01T00:00:00Z"
    }
  }
]

이 기본 출력은 이미지의 구성 및 메타데이터에 대한 포괄적인 보기를 제공합니다. 다음 단계에서는 이 출력을 특정 정보를 추출하도록 형식화하는 방법을 배우게 됩니다.

JSON 형식으로 이미지 검사 (Inspect)

이전 단계에서 hello-world 이미지를 검사하고 기본 출력 형식을 확인했습니다. 이 형식은 유익하지만 프로그래밍 방식으로 구문 분석하기 어려울 수 있습니다. Docker 의 inspect 명령을 사용하면 --format 플래그를 사용하여 출력 형식을 지정할 수 있습니다. 일반적이고 유용한 형식은 JSON 입니다.

이미지를 검사하고 JSON 형식으로 출력을 얻으려면 docker inspect 명령과 함께 --format json 플래그를 사용합니다.

hello-world 이미지를 다시 검사해 보지만 이번에는 출력을 JSON 으로 형식화합니다.

docker inspect --format json hello-world

이 명령은 이전과 동일한 정보를 출력하지만 단일 JSON 객체를 포함하는 JSON 배열로 형식화됩니다.

[
  {
    "Id": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
    "RepoTags": ["hello-world:latest"],
    "RepoDigests": [
      "hello-world@sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591"
    ],
    "Parent": "",
    "Comment": "",
    "Created": "2023-03-07T21:50:09.004511104Z",
    "Container": "a928b81f51a91111111111111111111111111111111111111111111111111111",
    "ContainerConfig": {
      "Hostname": "a928b81f51a9",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": {}
    },
    "DockerVersion": "20.10.21",
    "Author": "",
    "Config": {
      "Hostname": "",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": null
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Size": 1330,
    "VirtualSize": 1330,
    "GraphDriver": {
      "Data": null,
      "Name": "overlay2"
    },
    "RootFS": {
      "Type": "layers",
      "Layers": [
        "sha256:2db29710123e5455b34e722505b562504b39e55355e344405b54d3153a94650b"
      ]
    },
    "Metadata": {
      "LastTagTime": "0001-01-01T00:00:00Z"
    }
  }
]

JSON 형식은 다른 도구나 스크립트로 출력을 처리하려는 경우 특히 유용합니다.

Go 템플릿으로 이미지 검사 (Inspect)

기본 및 JSON 형식 외에도 docker inspect 명령을 사용하면 Go 템플릿을 사용하여 출력을 형식화할 수 있습니다. 이는 특정 필드를 추출하고 필요에 따라 출력을 정확하게 형식화할 수 있으므로 매우 강력합니다.

--format 플래그는 Go 템플릿 문자열을 허용합니다. 점 표기법을 사용하여 검사된 객체의 필드에 액세스할 수 있습니다. 예를 들어 이미지 ID 에 액세스하려면 .Id를 사용합니다. 중첩된 필드에 액세스하려면 .Config.Cmd와 같이 점을 연결하여 컨테이너가 실행할 명령을 가져올 수 있습니다.

hello-world 이미지를 검사하고 이미지 ID 와 컨테이너가 실행할 명령을 추출해 보겠습니다.

docker inspect --format 'ID: {{.Id}} Command: {{.Config.Cmd}}' hello-world

이 명령에서 Go 템플릿 문자열 'ID: {{.Id}} Command: {{.Config.Cmd}}'를 사용하고 있습니다.

  • {{.Id}}는 이미지 객체의 Id 필드에 액세스합니다.
  • {{.Config.Cmd}}Config 객체 내의 Cmd 필드에 액세스합니다.

출력은 템플릿에 따라 형식화됩니다.

ID: sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591 Command: [/hello]

Go 템플릿을 사용하여 기본 docker inspect 출력에서 사용할 수 있는 모든 정보를 추출할 수 있습니다. 이는 스크립팅 및 작업 자동화에 매우 유용합니다.

요약

이 랩에서는 docker pull 명령을 사용하여 레지스트리에서 Docker 이미지를 다운로드하는 방법을 배웠으며, 특히 hello-world 이미지를 예로 들었습니다. 그런 다음 docker inspect 명령을 사용하여 다운로드한 이미지에 대한 자세한 정보를 확인했습니다.

이미지의 특성에 대한 포괄적인 개요를 제공하는 기본 출력 형식을 사용하여 이미지를 검사하는 연습을 했습니다. 제공된 내용에서 자세히 설명되지는 않았지만, 후속 단계에서는 JSON 및 사용자 지정 Go 템플릿을 사용하여 docker inspect 출력을 형식화하여 특정 정보를 추출하는 방법을 탐색하여 이미지 세부 정보를 분석하기 위한 명령의 유연성을 보여줄 것입니다.