소개
이 랩에서는 docker images 명령어를 효과적으로 사용하여 시스템의 Docker 이미지를 나열하고 필터링하는 방법을 배우게 됩니다. 먼저 모든 최상위 이미지를 나열하는 것으로 시작하여 특정 이름과 태그로 이미지를 나열하는 방법을 살펴보겠습니다.
또한, dangling 상태 및 레이블 적용을 기반으로 이미지를 필터링하는 방법을 자세히 알아보겠습니다. 마지막으로, 보다 맞춤화된 정보 표시를 위해 사용자 정의 템플릿을 사용하여 docker images 명령의 출력 형식을 사용자 정의하는 방법을 배우게 됩니다.
모든 최상위 이미지 나열
이 단계에서는 시스템의 모든 최상위 Docker 이미지를 나열하는 방법을 배우게 됩니다. 최상위 이미지는 명시적으로 pull 하거나 빌드하는 이미지입니다. 빌드 프로세스 중에 생성된 중간 이미지가 아닙니다.
모든 최상위 이미지를 나열하려면 docker images 명령어를 사용할 수 있습니다. 이 명령어는 각 이미지에 대한 정보를 포함하는 테이블을 표시합니다. 여기에는 repository, tag, image ID, 생성 시간 및 크기가 포함됩니다.
이미지를 나열해 보겠습니다. 이는 새로운 환경이므로 처음에는 이미지가 많지 않을 수 있습니다. 나중에 단계에서 이미지를 pull 할 것입니다.
~/project 디렉토리에서 터미널을 열고 다음 명령을 실행합니다.
docker images
다음과 유사한 출력을 볼 수 있습니다 (정확한 출력은 존재하는 이미지에 따라 다를 수 있습니다).
REPOSITORY TAG IMAGE ID CREATED SIZE
이 출력은 현재 시스템에 최상위 이미지가 없음을 나타냅니다.
이름 및 태그로 이미지 나열
이 단계에서는 이름과 태그로 특정 Docker 이미지를 나열하는 방법을 배우게 됩니다. 이는 이미지가 많고 특정 이미지를 찾고 싶을 때 유용합니다.
docker images 명령어를 사용하면 repository 이름을 지정하고 선택적으로 태그를 지정하여 출력을 필터링할 수 있습니다. 형식은 docker images [REPOSITORY[:TAG]]입니다.
먼저, 나열할 항목이 있도록 이미지를 pull 해 보겠습니다. 테스트에 사용되는 매우 작은 이미지인 hello-world 이미지를 pull 할 것입니다.
hello-world 이미지를 pull 하려면 다음 명령을 실행합니다.
docker pull hello-world
이미지가 pull 되고 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다.
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
이제 hello-world 이미지가 있으므로 이름을 사용하여 이 이미지만 나열해 보겠습니다.
다음 명령을 실행합니다.
docker images hello-world
출력에는 hello-world 이미지만 표시됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest <image_id> <created_time> <size>
태그도 지정할 수 있습니다. latest 태그를 pull 했으므로 latest 태그가 있는 hello-world 이미지를 나열해 보겠습니다.
다음 명령을 실행합니다.
docker images hello-world:latest
latest가 지정되지 않은 경우 기본 태그이므로 출력은 이전 명령과 동일합니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest <image_id> <created_time> <size>
존재하지 않는 이미지를 나열하려고 하면 빈 출력이 표시됩니다. 예를 들어:
docker images non-existent-image
출력:
REPOSITORY TAG IMAGE ID CREATED SIZE
이는 이름과 태그로 이미지를 필터링할 수 있음을 확인합니다.
dangling 상태로 이미지 필터링
이 단계에서는 "중단된 (dangling)" 상태를 기반으로 Docker 이미지를 필터링하는 방법을 배우게 됩니다. 중단된 이미지는 태그가 지정된 이미지와 관계가 없는 레이어입니다. 이는 종종 이미지의 새 버전을 빌드한 결과이며, 이전 레이어는 태그 없이 남겨둡니다. 이러한 중단된 이미지는 디스크 공간을 소비하며 정리할 수 있습니다.
이미지를 중단된 상태로 필터링하려면 --filter 플래그를 dangling 키와 함께 사용할 수 있습니다. 값은 중단된 이미지만 표시하려면 true로, 중단되지 않은 이미지만 표시하려면 false로 설정할 수 있습니다.
먼저, 중단된 이미지를 생성해 보겠습니다. 기존 이미지를 대체하는 새 이미지를 빌드하여 이 작업을 수행할 수 있습니다. 이를 위해 간단한 Dockerfile 을 사용합니다.
~/project 디렉토리에 다음 내용으로 Dockerfile이라는 파일을 생성합니다.
FROM alpine
CMD ["echo", "Hello, world!"]
이 Dockerfile 은 매우 간단합니다. alpine 이미지를 기본 이미지로 사용하고 컨테이너가 실행될 때 "Hello, world!"를 출력합니다.
이제 이 Dockerfile 에서 이미지를 빌드하고 태그를 지정해 보겠습니다.
이미지를 빌드하고 my-image:latest로 태그를 지정하려면 다음 명령을 실행합니다.
docker build -t my-image:latest .
빌드 프로세스를 나타내는 출력을 볼 수 있습니다.
[+] Building
...
Successfully built <image_id>
Successfully tagged my-image:latest
이제 Dockerfile 을 약간 수정하고 동일한 태그로 다시 빌드해 보겠습니다. 이렇게 하면 my-image:latest 태그가 있는 새 이미지가 생성되고, 이 태그를 가진 이전 이미지는 중단됩니다.
~/project 디렉토리에서 Dockerfile을 편집하여 명령을 변경합니다.
FROM alpine
CMD ["echo", "Hello again!"]
이제 동일한 태그로 이미지를 다시 빌드합니다.
docker build -t my-image:latest .
이전 빌드와 유사한 출력을 볼 수 있지만 새 이미지 ID 가 생성됩니다. my-image:latest 태그가 있는 이전 이미지는 이제 중단되었습니다.
중단된 이미지를 확인하기 위해 모든 이미지를 나열해 보겠습니다.
다음 명령을 실행합니다.
docker images
REPOSITORY 및 TAG 열에 <none>이 있는 이미지를 볼 수 있습니다. 이것이 중단된 이미지입니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
my-image latest <new_image_id> <created_time> <size>
<none> <none> <old_image_id> <created_time> <size>
hello-world latest <image_id> <created_time> <size>
이제 --filter dangling=true 플래그를 사용하여 중단된 이미지만 표시하도록 필터링해 보겠습니다.
다음 명령을 실행합니다.
docker images --filter dangling=true
중단된 이미지만 표시됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> <old_image_id> <created_time> <size>
중단되지 않은 이미지만 보려면 --filter dangling=false를 사용할 수 있습니다.
다음 명령을 실행합니다.
docker images --filter dangling=false
이렇게 하면 중단되지 않은 모든 이미지가 나열됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
my-image latest <new_image_id> <created_time> <size>
hello-world latest <image_id> <created_time> <size>
이것은 중단된 상태를 기반으로 이미지를 필터링하는 방법을 보여줍니다.
label 로 이미지 필터링
이 단계에서는 레이블을 기반으로 Docker 이미지를 필터링하는 방법을 배우게 됩니다. 레이블은 이미지와 같은 Docker 객체에 연결할 수 있는 키 - 값 쌍입니다. 이는 이미지를 구성하고 식별하는 데 유용합니다.
레이블로 이미지를 필터링하려면 --filter 플래그를 label 키와 함께 사용합니다. 값은 단일 레이블 (label=<key>=<value>) 이거나 해당 값에 관계없이 해당 레이블이 있는 이미지를 찾기 위한 레이블 키 (label=<key>) 일 수 있습니다.
먼저, 레이블을 포함하는 새 Dockerfile 을 생성해 보겠습니다.
~/project 디렉토리에 다음 내용으로 Dockerfile.labeled라는 파일을 생성합니다.
FROM alpine
LABEL maintainer="LabEx User"
LABEL version="1.0"
CMD ["echo", "Image with labels!"]
이 Dockerfile 은 이전 Dockerfile 과 유사하지만 두 개의 LABEL 지침을 포함합니다.
이제 이 Dockerfile 에서 이미지를 빌드하고 태그를 지정해 보겠습니다.
이미지를 빌드하고 labeled-image:latest로 태그를 지정하려면 다음 명령을 실행합니다.
docker build -t labeled-image:latest -f Dockerfile.labeled .
빌드 프로세스와 이미지의 성공적인 태깅을 나타내는 출력을 볼 수 있습니다.
이제 모든 이미지를 나열하여 새로 생성된 이미지를 확인해 보겠습니다.
다음 명령을 실행합니다.
docker images
다른 이미지와 함께 목록에 labeled-image가 표시됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
labeled-image latest <image_id> <created_time> <size>
my-image latest <new_image_id> <created_time> <size>
<none> <none> <old_image_id> <created_time> <size>
hello-world latest <image_id> <created_time> <size>
이제 maintainer 레이블로 이미지를 필터링해 보겠습니다. maintainer 레이블의 값이 "LabEx User"인 이미지를 필터링합니다.
다음 명령을 실행합니다.
docker images --filter label=maintainer=LabEx User
labeled-image만 표시됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
labeled-image latest <image_id> <created_time> <size>
값에 관계없이 레이블 키로만 필터링할 수도 있습니다. version 레이블이 있는 이미지를 필터링해 보겠습니다.
다음 명령을 실행합니다.
docker images --filter label=version
다시 labeled-image만 표시됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
labeled-image latest <image_id> <created_time> <size>
이것은 레이블을 사용하여 이미지를 필터링하는 방법을 보여줍니다.
사용자 정의 템플릿으로 출력 형식 지정
이 단계에서는 사용자 정의 템플릿을 사용하여 docker images 명령의 출력 형식을 지정하는 방법을 배우게 됩니다. 이는 기계가 읽을 수 있는 형식 또는 사용자 정의 사람이 읽을 수 있는 형식으로 이미지에 대한 특정 정보를 추출하려는 경우에 유용합니다.
docker images 명령은 출력을 제어하기 위해 Go 템플릿을 지정할 수 있는 --format 플래그를 지원합니다. 템플릿 내에서 다양한 자리 표시자를 사용하여 이미지의 다른 속성에 액세스할 수 있습니다.
출력 형식을 지정하여 이미지 ID 와 레지스트리 이름만 콜론으로 구분하여 표시해 보겠습니다.
다음 명령을 실행합니다.
docker images --format "{{.ID}}: {{.Repository}}"
각 이미지에 대한 이미지 ID 와 레지스트리를 나열하는 다음과 유사한 출력을 볼 수 있습니다.
<image_id>: hello-world
<new_image_id>: my-image
<old_image_id>: <none>
<image_id>: labeled-image
중단된 이미지의 경우 레지스트리에 <none>이 계속 표시됩니다.
태그 및 크기와 같은 다른 속성도 포함할 수 있습니다. 탭으로 구분된 레지스트리, 태그 및 크기를 표시하도록 출력 형식을 지정해 보겠습니다.
다음 명령을 실행합니다.
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
형식 문자열의 시작 부분에 table을 사용하면 헤더가 있는 테이블과 같은 출력이 생성됩니다.
다음과 유사한 출력을 볼 수 있습니다.
REPOSITORY TAG SIZE
hello-world latest <size>
my-image latest <size>
<none> <none> <size>
labeled-image latest <size>
docker images 명령에 대한 Docker 설명서에서 사용 가능한 자리 표시자 목록을 찾을 수 있습니다. 몇 가지 일반적인 예는 다음과 같습니다.
.ID: 이미지 ID.Repository: 이미지 레지스트리 이름.Tag: 이미지 태그.Created: 이미지가 생성된 시간.Size: 이미지 크기.Containers: 이미지를 사용하는 컨테이너 수
출력을 사용자 정의하는 방법을 확인하기 위해 다양한 템플릿을 사용해 보십시오. 예를 들어 이미지 ID 와 생성 시간을 나열하려면 다음을 수행합니다.
docker images --format "{{.ID}} created at {{.Created}}"
이 단계는 Docker 이미지 나열 및 필터링에 대한 실습을 마무리합니다. 모든 이미지를 나열하고, 이름, 태그, 중단된 상태 및 레이블별로 필터링하고, 사용자 정의 템플릿을 사용하여 출력 형식을 지정하는 방법을 배웠습니다.
요약
이 실습에서는 docker images 명령을 사용하여 Docker 이미지를 나열하고 필터링하는 방법을 배웠습니다. 시스템의 모든 최상위 이미지를 나열하는 것으로 시작했습니다. 그런 다음, hello-world 이미지를 가져온 후 이름과 태그별로 특정 이미지를 나열하는 연습을 했습니다.
또한 중단된 상태 및 특정 레이블을 기반으로 이미지를 필터링하는 방법도 살펴보았습니다. 마지막으로, 사용자 정의 템플릿을 사용하여 docker images 명령의 출력 형식을 사용자 정의하는 방법을 배웠으며, 필요한 정보만 표시할 수 있습니다.



