docker image tag 명령어를 사용하여 이미지 별칭 관리 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker image tag 명령어를 사용하여 Docker 이미지 별칭을 효과적으로 관리하는 방법을 배우게 됩니다. 특정 이미지 버전을 식별하고 찾기 위해 필수적인 Docker 이미지 참조의 구조와 구성 요소를 이해하는 것으로 시작합니다.

이미지 참조에 대한 기본적인 이해를 바탕으로, ID, 기존 이름, 이름 및 태그 조합 등 다양한 방법으로 이미지를 태깅하는 실습을 진행합니다. 마지막으로, 개인 Docker 레지스트리 (private Docker registry) 에서 사용할 이미지를 특별히 태깅하는 방법을 배우게 됩니다. 이를 통해 사용자 정의 위치에서 이미지를 푸시하고 풀할 수 있습니다.

Docker 이미지 참조 이해

이 단계에서는 Docker 이미지 참조에 대해 배우겠습니다. Docker 이미지 참조는 Docker 이미지의 특정 버전을 가리키는 이름입니다. 컨테이너를 실행하거나 다른 이미지 관련 작업을 수행할 때 어떤 이미지를 사용하고 싶은지 Docker 에게 알려주는 방법입니다.

전체 이미지 참조는 일반적으로 여러 부분으로 구성됩니다.

[registry_hostname[:port]/]image_name[:tag]

각 부분을 자세히 살펴보겠습니다.

  • registry_hostname[:port]: 이미지가 저장된 Docker 레지스트리의 호스트 이름과 선택적 포트입니다. 이 부분이 생략되면 Docker 는 Docker Hub(docker.io) 를 기본값으로 사용합니다.
  • image_name: 이미지의 이름입니다. 네임스페이스 (예: library/ubuntu 또는 myuser/myapp) 를 포함할 수 있습니다. Docker Hub 의 공식 이미지에 대해 네임스페이스가 지정되지 않은 경우, library/ 네임스페이스가 암시됩니다 (예: ubuntulibrary/ubuntu와 동일합니다).
  • tag: 이미지의 특정 버전 또는 변형을 지정하는 선택적 태그입니다. 태그가 지정되지 않은 경우 Docker 는 latest 태그를 기본값으로 사용합니다.

몇 가지 예를 살펴보겠습니다.

  • ubuntu: Docker Hub 의 공식 ubuntu 이미지의 latest 태그를 참조합니다.
  • ubuntu:20.04: Docker Hub 의 공식 ubuntu 이미지의 20.04 태그를 참조합니다.
  • myuser/myapp: Docker Hub 의 myuser 저장소에 있는 myapp 이미지의 latest 태그를 참조합니다.
  • myuser/myapp:v1.0: Docker Hub 의 myuser 저장소에 있는 myapp 이미지의 v1.0 태그를 참조합니다.
  • myregistry.example.com:5000/myuser/myapp:v1.0: myregistry.example.com의 포트 5000에 위치한 개인 레지스트리에 있는 myuser 저장소의 myapp 이미지의 v1.0 태그를 참조합니다.

이미지 참조가 실제로 어떻게 작동하는지 확인하기 위해, 참조를 사용하여 이미지를 풀 (pull) 해 보겠습니다. Docker 설치를 테스트하는 데 사용되는 매우 작은 이미지인 hello-world 이미지를 풀하겠습니다.

docker pull hello-world

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

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 Hub 에서 hello-world 이미지의 latest 태그를 풀링했습니다. 출력은 전체 참조 docker.io/library/hello-world:latest를 확인합니다.

이제 다운로드한 이미지를 나열해 보겠습니다.

docker images

hello-world 이미지가 나열된 것을 볼 수 있습니다.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    <image_id>     <created_time>   <size>

출력은 이미지의 REPOSITORY(이미지 이름), TAG, IMAGE ID, CREATED 시간 및 SIZE를 보여줍니다. IMAGE ID는 이미지 콘텐츠에 대한 고유 식별자입니다.

Docker 를 사용하려면 이미지 참조를 이해하는 것이 중요합니다. 이를 통해 정확히 어떤 이미지를 사용하고 싶은지 지정할 수 있습니다.

ID 를 사용하여 이미지 태깅

이 단계에서는 이미지 ID 를 사용하여 Docker 이미지를 태깅하는 방법을 배우겠습니다. 이미지를 태깅하면 새 이름 및/또는 태그를 지정하여 동일한 이미지 콘텐츠를 가리키는 새로운 참조를 만들 수 있습니다. 이는 별칭 생성, 버전 관리 또는 다른 레지스트리로 푸시할 이미지를 준비하는 데 유용합니다.

이미지를 태깅하는 기본 명령어는 docker tag입니다. 구문은 다음과 같습니다.

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

이미지 ID, 이름 또는 이름과 태그를 사용하여 소스 이미지를 지정할 수 있습니다. 이 단계에서는 이미지 ID 를 사용합니다.

먼저, 이전 단계에서 풀링한 hello-world 이미지의 이미지 ID 를 얻기 위해 이미지를 다시 나열해 보겠습니다.

docker images

출력에서 hello-world 이미지를 찾고 해당 IMAGE ID를 기록해 둡니다. 예를 들어 bf756fb1cdb1과 같은 16 진수 문자열일 것입니다. 이미지 중에서 고유한 경우 ID 의 처음 몇 글자만 사용하면 됩니다.

이제 이미지 ID 를 사용하여 hello-world 이미지를 태깅해 보겠습니다. 새 이름 my-hello-world와 태그 v1.0으로 태깅합니다. <image_id>docker images 출력에서 기록한 실제 이미지 ID 로 바꿉니다.

docker tag < image_id > my-hello-world:v1.0

명령이 성공하면 출력이 없습니다.

이제 이미지를 다시 나열하여 새 태그를 확인해 보겠습니다.

docker images

이제 my-hello-world 저장소와 v1.0 태그가 있는 새 항목이 표시됩니다. 원래 hello-world 이미지와 동일한 IMAGE ID를 가지고 있음을 확인합니다. 이는 새 태그가 동일한 이미지 콘텐츠를 가리키는 포인터임을 확인합니다.

REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
hello-world      latest    <image_id>     <created_time>   <size>
my-hello-world   v1.0      <image_id>     <created_time>   <size>

이미지 ID 를 사용하여 이미지를 성공적으로 태깅했습니다. 이는 Docker 이미지를 관리하는 기본적인 작업입니다.

이름을 사용하여 이미지 태깅

이 단계에서는 이름을 사용하여 Docker 이미지를 태깅하는 방법을 배우겠습니다. 이는 태깅할 때 이미지를 참조하는 또 다른 일반적인 방법입니다. 태그 없이 이미지 이름만 사용하는 경우 Docker 는 latest 태그가 있는 이미지를 참조한다고 가정합니다.

이미지 이름을 사용하여 태깅하는 구문은 이전과 동일합니다.

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

이번에는 SOURCE_IMAGE가 이미지의 이름이 됩니다. 다시 hello-world 이미지를 사용합니다. 소스에 대한 태그를 지정하지 않으므로 Docker 는 hello-world:latest를 사용합니다.

hello-world 이미지를 새 이름 another-hello-world와 태그 v2.0으로 태깅해 보겠습니다.

docker tag hello-world another-hello-world:v2.0

다시, 명령이 성공하면 출력이 없습니다.

이제 이미지를 나열하여 새 태그를 확인해 보겠습니다.

docker images

이제 another-hello-world 저장소와 v2.0 태그가 있는 새 항목이 표시됩니다. 이전 단계와 마찬가지로 이 새 태그도 원래 hello-world 이미지와 동일한 IMAGE ID를 가리킵니다.

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
hello-world         latest    <image_id>     <created_time>   <size>
my-hello-world      v1.0      <image_id>     <created_time>   <size>
another-hello-world v2.0      <image_id>     <created_time>   <size>

이름을 사용하여 이미지를 성공적으로 태깅했습니다. 이는 이미지의 latest 버전에 대한 새 태그를 만드는 편리한 방법입니다.

이름 및 태그를 사용하여 이미지 태깅

이 단계에서는 이름과 태그를 사용하여 Docker 이미지를 태깅하는 방법을 배우겠습니다. 이는 태깅할 때 특정 버전의 이미지를 참조하는 가장 구체적인 방법입니다.

구문은 동일하게 유지됩니다.

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

이번에는 SOURCE_IMAGE가 이름과 태그로 모두 지정됩니다. 이전 단계에서 생성한 my-hello-world:v1.0 이미지를 사용합니다.

my-hello-world:v1.0 이미지를 새 이름 yet-another-hello-world와 태그 release로 태깅해 보겠습니다.

docker tag my-hello-world:v1.0 yet-another-hello-world:release

명령이 성공하면 출력이 없습니다.

이제 이미지를 나열하여 새 태그를 확인해 보겠습니다.

docker images

이제 yet-another-hello-world 저장소와 release 태그가 있는 새 항목이 표시됩니다. 이 새 태그는 원래 hello-world 이미지와 우리가 생성한 다른 태그와 동일한 IMAGE ID를 가리킵니다.

REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
hello-world             latest    <image_id>     <created_time>   <size>
my-hello-world          v1.0      <image_id>     <created_time>   <size>
another-hello-world     v2.0      <image_id>     <created_time>   <size>
yet-another-hello-world release   <image_id>     <created_time>   <size>

이름과 태그를 사용하여 이미지를 성공적으로 태깅했습니다. 이 방법은 이미지의 특정 기존 태그된 버전을 기반으로 새 태그를 만들려는 경우 유용합니다.

개인 레지스트리를 위한 이미지 태깅

이 단계에서는 Docker 이미지를 개인 레지스트리로 푸시할 수 있도록 태깅하는 방법을 배우겠습니다. 개인 레지스트리를 위해 이미지를 태깅할 때는 대상 이미지 참조에 레지스트리의 호스트 이름과 선택적 포트를 포함해야 합니다.

태깅 구문은 다음과 같습니다.

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

TARGET_IMAGE는 이제 레지스트리 정보를 포함합니다.

[registry_hostname[:port]/]image_name[:tag]

5000 포트에서 myregistry.example.com에서 실행되는 개인 레지스트리가 있다고 가정해 보겠습니다. 이 가상의 레지스트리로 푸시할 수 있도록 hello-world 이미지 ( latest 태그 사용) 를 태깅합니다. my-hello-world라는 이름과 prod 태그를 지정합니다.

docker tag hello-world:latest myregistry.example.com:5000/my-hello-world:prod

명령이 성공하면 출력이 없습니다.

이제 이미지를 나열하여 레지스트리 이름이 있는 새 태그를 확인해 보겠습니다.

docker images

이제 myregistry.example.com:5000/my-hello-world 저장소와 prod 태그가 있는 새 항목이 표시됩니다. 이 태그는 원래 hello-world 이미지와 동일한 IMAGE ID를 가리킵니다.

REPOSITORY                                TAG       IMAGE ID       CREATED        SIZE
hello-world                               latest    <image_id>     <created_time>   <size>
my-hello-world                            v1.0      <image_id>     <created_time>   <size>
another-hello-world                       v2.0      <image_id>     <created_time>   <size>
yet-another-hello-world                   release   <image_id>     <created_time>   <size>
myregistry.example.com:5000/my-hello-world prod      <image_id>     <created_time>   <size>

개인 레지스트리 호스트 이름과 포트를 포함하는 참조로 이미지를 성공적으로 태깅했습니다. 이는 docker push 명령을 사용하여 해당 레지스트리로 이미지를 푸시하기 전에 필요한 단계입니다.

요약

이 랩에서는 Docker 이미지 참조에 대해 배웠으며, 선택적 레지스트리 호스트 이름, 이미지 이름 및 태그를 포함한 구조를 이해했습니다. 이러한 참조가 Docker 레지스트리에서 특정 이미지 버전을 고유하게 식별하고 가져오는 데 어떻게 사용되는지 살펴보았습니다.

그런 다음 docker image tag 명령을 사용하여 기존 이미지에 대한 별칭을 만드는 방법을 살펴보았습니다. ID, 기존 이름, 기존 이름 및 태그 조합을 사용하여 이미지를 태깅하는 연습을 했습니다. 마지막으로, 사용자 지정 레지스트리로 푸시할 수 있도록 개인 레지스트리 호스트 이름을 포함하는 참조로 이미지를 태깅하는 방법을 배웠습니다.