docker inspect 명령어를 사용하여 상세 정보 얻는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker inspect 명령어를 효과적으로 사용하여 Docker 객체, 특히 컨테이너에 대한 자세한 정보를 검색하는 방법을 배우게 됩니다. 먼저 컨테이너를 검사하고 명령어가 제공하는 포괄적인 기본 JSON 출력을 이해하는 것으로 시작합니다.

이를 바탕으로 Go 템플릿을 사용하여 출력을 형식화하여 컨테이너의 IP 주소와 같은 특정 데이터 포인트를 추출하는 방법을 살펴보겠습니다. 또한 이 랩에서는 컨테이너의 크기를 검사하는 방법과 컨테이너 외에 다른 유형의 Docker 객체를 검사하는 방법을 보여줍니다.

컨테이너 검사 및 기본 출력 이해

이 단계에서는 Docker 컨테이너를 검사하고 기본 출력을 이해하는 방법을 배우게 됩니다. docker inspect 명령어는 컨테이너, 이미지, 네트워크 및 볼륨을 포함한 Docker 객체에 대한 자세한 정보를 제공합니다. 기본적으로 구성 세부 정보, 상태 및 기타 메타데이터를 포함하는 JSON 배열을 반환합니다.

먼저, 작업할 간단한 이미지를 가져와 보겠습니다. hello-world 이미지를 사용합니다.

docker pull hello-world

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

이제 이 이미지에서 컨테이너를 실행해 보겠습니다.

docker run hello-world

이 명령어는 메시지를 출력한 다음 종료되는 hello-world 컨테이너를 실행합니다.

방금 실행된 컨테이너를 검사하려면 해당 ID 또는 이름이 필요합니다. docker ps -a를 사용하여 마지막으로 종료된 컨테이너의 ID 를 찾을 수 있습니다.

docker ps -a

hello-world 이미지가 있는 컨테이너를 찾아서 해당 CONTAINER ID 를 복사합니다.

이제 docker inspect 명령어를 사용하고 방금 복사한 컨테이너 ID 를 입력합니다. <container_id>를 실제 ID 로 바꿉니다.

docker inspect <container_id>

이 명령어는 컨테이너에 대한 자세한 정보를 포함하는 큰 JSON 문서를 출력합니다. 이 기본 출력에는 컨테이너의 상태, 구성, 네트워크 설정 및 마운트된 볼륨과 같은 광범위한 데이터가 포함됩니다. 이 출력을 이해하는 것은 컨테이너를 디버깅하고 관리하는 데 매우 중요합니다.

사용 가능한 정보에 대한 감을 얻으려면 출력을 스크롤합니다. Id, State, Created, Path, Args, Config, NetworkSettings 등과 같은 필드를 볼 수 있습니다.

특정 정보를 얻기 위한 출력 형식 지정

이전 단계에서 docker inspect가 JSON 형식으로 많은 양의 정보를 제공하는 것을 보았습니다. 종종 특정 정보 조각만 필요합니다. Docker 를 사용하면 --format 플래그와 Go 템플릿을 사용하여 출력을 형식화할 수 있습니다.

실행 중인 컨테이너의 IP 주소를 가져와 보겠습니다. 먼저 실행 중인 컨테이너가 필요합니다. 이를 위해 간단한 nginx 컨테이너를 사용합니다.

nginx 이미지를 가져옵니다.

docker pull nginx

백그라운드에서 실행되도록 분리 모드 (-d) 로 nginx 컨테이너를 실행합니다.

docker run -d nginx

이 명령어는 컨테이너 ID 를 출력합니다. 이 ID 를 복사합니다.

이제 --format 플래그와 함께 docker inspect를 사용하여 컨테이너의 IP 주소를 가져오겠습니다. <container_id>를 실행 중인 nginx 컨테이너의 ID 로 바꿉니다.

docker inspect --format='{{.NetworkSettings.IPAddress}}' <container_id>

--format 플래그는 Go 템플릿 구문을 사용합니다. .은 최상위 JSON 객체를 나타냅니다. 점 표기법을 사용하여 JSON 구조를 탐색합니다. .NetworkSettingsNetworkSettings 객체에 액세스하고 .IPAddressNetworkSettings 내의 IPAddress 필드에 액세스합니다. 이중 중괄호 {{ }}는 Go 템플릿 작업을 나타냅니다.

컨테이너의 IP 주소가 콘솔에 출력되는 것을 볼 수 있습니다.

유사하게 다른 정보를 추출할 수 있습니다. 예를 들어 컨테이너의 상태를 얻으려면 다음을 수행합니다.

docker inspect --format='{{.State.Status}}' <container_id>

이렇게 하면 컨테이너의 현재 상태 (예: "running") 가 출력됩니다.

컨테이너의 이름을 얻으려면 다음을 수행합니다.

docker inspect --format='{{.Name}}' <container_id>

이렇게 하면 컨테이너의 이름 (예: /vigilant_goldberg) 이 출력됩니다.

형식 문자열에서 여러 필드를 결합할 수도 있습니다. 예를 들어 컨테이너 ID 와 상태를 얻으려면 다음을 수행합니다.

docker inspect --format='ID: {{.Id}}, Status: {{.State.Status}}' <container_id>

이렇게 하면 ID 와 상태가 더 읽기 쉬운 형식으로 출력됩니다.

이전 단계에서 본 JSON 출력에서 필요한 정보를 추출하기 위해 다양한 필드를 실험해 보십시오.

컨테이너 크기 검사

이 단계에서는 Docker 컨테이너의 크기를 검사하는 방법을 배우게 됩니다. 컨테이너 크기를 이해하는 것은 디스크 공간을 관리하고 이미지 빌드를 최적화하는 데 중요합니다.

docker inspect 명령어는 컨테이너 크기에 대한 정보를 제공할 수 있지만, 실행 중인 컨테이너의 크기를 확인하는 더 직접적인 방법은 --size 플래그와 함께 docker ps 명령어를 사용하는 것입니다.

먼저, 실행 중인 컨테이너가 있는지 확인합니다. 이전 단계에서 사용한 nginx 컨테이너가 아직 실행 중이면 해당 컨테이너를 사용할 수 있습니다. 그렇지 않은 경우 다시 실행합니다.

docker run -d nginx

이제 실행 중인 컨테이너를 나열하고 크기 정보를 포함합니다.

docker ps --size

SIZE라는 레이블이 지정된 추가 열이 표시됩니다. 이 열은 두 가지 값을 표시합니다. 가상 크기 (virtual size) 와 디스크 크기 (size on disk) 입니다.

  • 가상 크기 (Virtual Size): 컨테이너의 이미지 레이어의 총 크기와 컨테이너의 쓰기 가능한 레이어의 크기를 합한 값입니다.
  • 크기 (Size): 디스크에서 컨테이너의 쓰기 가능한 레이어의 크기입니다. 이 레이어에는 컨테이너가 시작된 이후 컨테이너의 파일 시스템에 적용된 모든 변경 사항이 포함되어 있습니다.

종료된 컨테이너의 경우 docker ps -a --size를 사용하여 크기를 확인할 수 있습니다.

docker ps -a --size

docker inspect를 사용하고 출력을 형식화하여 크기 정보를 얻을 수도 있습니다. 크기 정보는 .SizeRw (쓰기 가능한 레이어의 크기) 및 .SizeRootFs (이미지 레이어를 포함한 총 크기) 에서 사용할 수 있습니다.

<container_id>를 컨테이너 중 하나의 ID 로 바꿉니다.

docker inspect --format='Writable Layer Size: {{.SizeRw}}, Total Size: {{.SizeRootFs}}' <container_id>

이 명령어는 쓰기 가능한 레이어의 크기와 컨테이너의 루트 파일 시스템의 총 크기를 출력합니다.

가상 크기와 디스크 크기의 차이를 이해하는 것이 중요합니다. 가상 크기에는 공유 이미지 레이어가 포함되어 있으며, 실행 중인 컨테이너의 디스크 크기는 주로 해당 특정 컨테이너의 쓰기 가능한 레이어에 기록된 고유 데이터를 반영합니다.

특정 유형의 객체 검사

이전 단계에서 컨테이너에 대해 docker inspect를 사용했습니다. 그러나 docker inspect는 이미지, 네트워크 및 볼륨을 포함한 다양한 Docker 객체를 검사하는 데 사용할 수 있는 다용도 명령어입니다.

컨테이너가 아닌 객체를 검사하려면 객체의 이름 또는 ID 앞에 객체 유형을 지정해야 합니다. 구문은 docker inspect <object_type> <object_name_or_id>입니다.

이전에 가져온 nginx 이미지를 검사해 보겠습니다.

먼저 이미지를 나열하여 이미지 ID 또는 이름을 얻습니다.

docker images

nginx 이미지를 찾고 REPOSITORY, TAG 또는 IMAGE ID 를 기록합니다.

이제 nginx 이미지를 검사합니다. 이미지 이름과 태그 (예: nginx:latest) 또는 이미지 ID 를 사용할 수 있습니다. <image_name_or_id>를 적절한 값으로 바꿉니다.

docker inspect image <image_name_or_id>

이렇게 하면 레이어, 구성 및 메타데이터를 포함하여 nginx 이미지에 대한 자세한 정보가 출력됩니다. 컨테이너를 검사하는 것과 출력 구조가 다르다는 것을 알 수 있습니다. 이는 이미지의 속성을 반영하기 때문입니다.

다음으로 Docker 네트워크를 검사해 보겠습니다. Docker 는 기본 네트워크를 생성합니다. docker network ls를 사용하여 나열할 수 있습니다.

docker network ls

bridge, host, none과 같은 네트워크가 표시될 것입니다. bridge 네트워크를 검사해 보겠습니다.

docker inspect network bridge

이 명령어는 구성, 연결된 컨테이너 및 IP 주소 지정 정보를 포함하여 bridge 네트워크에 대한 세부 정보를 표시합니다.

마지막으로 Docker 볼륨을 검사해 보겠습니다. 볼륨이 없는 경우 볼륨을 만들 수 있습니다.

docker volume create myvolume

이제 방금 생성한 볼륨을 검사합니다.

docker inspect volume myvolume

이렇게 하면 드라이버, 마운트 지점 및 범위를 포함하여 myvolume에 대한 정보가 표시됩니다.

객체 유형 (container, image, network, volume 등) 을 지정하여 docker inspect를 사용하여 Docker 환경의 다양한 구성 요소에 대한 자세한 정보를 얻을 수 있습니다.

요약

이 Lab 에서는 docker inspect 명령어를 사용하여 Docker 컨테이너에 대한 자세한 정보를 얻는 방법을 배웠습니다. 컨테이너를 검사하고 광범위한 구성 및 상태 세부 정보를 제공하는 포괄적인 기본 JSON 출력을 이해하는 것으로 시작했습니다.

이후, 컨테이너의 IP 주소와 같은 특정 정보를 추출하기 위해 --format 플래그와 Go 템플릿을 사용하여 출력을 형식화하는 방법을 탐구했습니다. 이는 필요에 맞게 출력을 조정하는 docker inspect의 유연성을 보여줍니다.