소개
이 랩에서는 docker pull 명령을 사용하여 레지스트리에서 Docker 이미지를 다운로드하는 방법을 배우게 됩니다. Docker Hub 에서 태그를 사용하여 특정 이미지를 가져오기, 불변 다이제스트 (immutable digest) 를 사용하여 이미지 버전을 보장하는 방법, 레포지토리에서 태그된 모든 이미지를 가져오기, Docker Hub 이외의 레지스트리에서 이미지를 가져오는 등 다양한 이미지 가져오기 방법을 살펴볼 것입니다.
이 단계를 완료함으로써 컨테이너화된 애플리케이션을 구축하고 실행하는 데 필수적인 기술인 Docker 이미지를 획득하는 실질적인 경험을 얻게 될 것입니다. 이미지 버전과 소스를 지정하는 방법을 배우게 되어 프로젝트에 필요한 이미지를 안정적으로 확보할 수 있습니다.
Docker Hub 에서 태그로 특정 이미지 가져오기
이 단계에서는 Docker Hub 에서 태그를 사용하여 특정 Docker 이미지를 가져오는 방법을 배우게 됩니다. Docker Hub 는 많은 공식 및 커뮤니티 기여 Docker 이미지를 호스팅하는 공개 레지스트리입니다. 이미지를 가져온다는 것은 레지스트리에서 로컬 머신으로 이미지를 다운로드하는 것을 의미합니다.
이미지를 가져오는 기본 명령은 docker pull <image_name>:<tag>입니다. 태그를 지정하지 않으면 Docker 는 기본적으로 latest 태그를 가져옵니다. 그러나 특정 이미지 버전을 얻으려면 태그를 지정하는 것이 좋습니다.
latest 태그를 사용하여 hello-world 이미지를 가져와 보겠습니다. 이 이미지는 Docker 설치가 제대로 작동하는지 테스트하는 데 사용되는 매우 작은 이미지입니다.
docker pull hello-world:latest
Docker 가 이미지 레이어를 다운로드하고 있음을 나타내는 출력을 볼 수 있습니다.
Using default tag: latest
latest: Pulling from library/hello-world
Digest: sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
이제 ubuntu 이미지를 특정 태그, 예를 들어 20.04로 가져와 보겠습니다. 이렇게 하면 Ubuntu 20.04 LTS 이미지가 다운로드됩니다.
docker pull ubuntu:20.04
다운로드 진행 상황을 보여주는 유사한 출력을 볼 수 있습니다.
20.04: Pulling from library/ubuntu
... (download progress) ...
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
가져온 이미지를 보려면 docker images 명령을 사용할 수 있습니다.
docker images
이 명령은 로컬 머신에 저장된 모든 이미지를 해당 레포지토리, 태그, 이미지 ID, 생성 시간 및 크기와 함께 나열합니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 ... ... ...
hello-world latest ... ... ...
Docker Hub 에서 태그로 특정 이미지를 성공적으로 가져왔습니다.
불변 다이제스트로 이미지 가져오기
이 단계에서는 불변 다이제스트를 사용하여 Docker 이미지를 가져오는 방법을 배우게 됩니다. 태그는 편리하지만 다른 이미지 버전을 가리키도록 업데이트될 수 있습니다. 반면에 다이제스트는 특정 이미지 레이어 구성 및 해당 기록에 대한 고유 식별자입니다. 이는 매번 정확히 동일한 이미지를 가져오도록 보장하는 더 신뢰할 수 있는 방법입니다.
다이제스트로 이미지를 가져오는 형식은 docker pull <image_name>@<digest>입니다.
먼저, 이미 가지고 있는 이미지의 다이제스트를 찾아보겠습니다. docker images --digests 명령을 사용하여 로컬 이미지의 다이제스트를 표시할 수 있습니다.
docker images --digests
DIGEST 열을 포함하여 다음과 유사한 출력을 볼 수 있습니다.
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
ubuntu 20.04 sha256:... ... ...
hello-world latest sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc ... ... ...
hello-world 이미지의 다이제스트를 사용해 보겠습니다. 전체 다이제스트 문자열 ( sha256:로 시작) 을 복사합니다.
이제 hello-world 이미지를 다시 가져와 보지만 이번에는 다이제스트를 사용합니다. <digest>를 복사한 실제 다이제스트로 바꿉니다.
docker pull hello-world@sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc
이 이미지 레이어를 이미 가지고 있을 가능성이 높으므로 Docker 는 이미지가 최신 상태라고 보고합니다.
sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc: Pulling from library/hello-world
Digest: sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc
Status: Downloaded newer image for hello-world@sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc
docker.io/library/hello-world@sha256:f52335ce493f8f15cfcf46725b2909db9087b688aedabbbd2a167ae30b6da6fc
다이제스트로 가져오는 것은 특정하고 변경되지 않는 이미지 버전을 배포해야 하는 프로덕션 환경 또는 자동화된 스크립트에서 특히 유용합니다.
docker images --digests를 사용하여 이미지를 다시 확인할 수 있습니다. 이전에 태그로 가져온 경우 hello-world 이미지가 태그와 다이제스트 모두와 함께 나열되는 것을 볼 수 있습니다.
docker images --digests
레포지토리에서 태그된 모든 이미지 가져오기
이 단계에서는 Docker Hub 의 특정 레포지토리에서 태그된 모든 이미지를 가져오는 방법을 배우게 됩니다. 이는 테스트 또는 기타 목적으로 여러 버전의 이미지를 다운로드하려는 경우 유용할 수 있습니다.
레포지토리에서 태그된 모든 이미지를 가져오려면 docker pull -a <image_name> 명령을 사용할 수 있습니다. -a 플래그는 "all-tags"를 의미합니다.
alpine 레포지토리에 대해 태그된 모든 이미지를 가져와 보겠습니다. Alpine 은 컨테이너에서 자주 사용되는 가벼운 Linux 배포판입니다.
docker pull -a alpine
이 명령은 태그가 있는 alpine 레포지토리의 모든 이미지 다운로드를 시작합니다. latest, 3.14, 3.15 등과 같은 다양한 태그의 다운로드를 보여주는 출력을 볼 수 있습니다.
Using default tag: latest
latest: Pulling from library/alpine
... (download progress for various tags) ...
Status: Downloaded newer image for alpine:latest
Status: Downloaded newer image for alpine:3.14
Status: Downloaded newer image for alpine:3.15
...
docker.io/library/alpine:latest
docker.io/library/alpine:3.14
docker.io/library/alpine:3.15
...
레포지토리의 태그 수에 따라 이 명령을 완료하는 데 시간이 걸릴 수 있습니다.
명령이 완료되면 docker images를 사용하여 가져온 모든 alpine 이미지를 볼 수 있습니다.
docker images | grep alpine
다양한 태그가 있는 alpine 이미지 목록을 볼 수 있습니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest ... ... ...
alpine 3.14 ... ... ...
alpine 3.15 ... ... ...
...
이 방법은 단일 레포지토리에서 여러 버전의 이미지를 다운로드하는 데 효율적입니다.
다른 레지스트리에서 이미지 가져오기
이 단계에서는 Docker Hub 가 아닌 다른 레지스트리에서 Docker 이미지를 가져오는 방법을 배우게 됩니다. Docker Hub 가 기본값이지만, 개인 레지스트리, 클라우드 제공업체 레지스트리 (예: Google Container Registry, Amazon Elastic Container Registry) 또는 기타 공용 레지스트리에서 이미지를 가져와야 할 수 있습니다.
다른 레지스트리에서 이미지를 가져오려면 이미지 이름 앞에 레지스트리의 호스트 이름을 지정해야 합니다. 형식은 일반적으로 <registry_hostname>/<image_name>:<tag> 또는 <registry_hostname>/<user_or_organization>/<image_name>:<tag>입니다.
이 예제에서는 Google Container Registry (GCR) 에서 이미지를 가져오겠습니다. google-samples 프로젝트에서 hello-app 이미지를 가져오겠습니다. GCR 의 레지스트리 호스트 이름은 gcr.io입니다.
docker pull gcr.io/google-samples/hello-app:1.0
이 명령은 Docker 에게 google-samples 프로젝트 내의 gcr.io에 있는 레지스트리에서 태그 1.0을 가진 hello-app라는 이미지를 가져오도록 지시합니다.
지정된 레지스트리에서 다운로드 프로세스를 나타내는 출력을 볼 수 있습니다.
1.0: Pulling from google-samples/hello-app
... (download progress) ...
Status: Downloaded newer image for gcr.io/google-samples/hello-app:1.0
gcr.io/google-samples/hello-app:1.0
가져오기가 완료되면 docker images를 사용하여 로컬 이미지를 나열하여 GCR 에서 방금 가져온 이미지를 확인할 수 있습니다.
docker images
이미지에 gcr.io/google-samples/hello-app가 나열된 것을 볼 수 있습니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google-samples/hello-app 1.0 ... ... ...
ubuntu 20.04 ... ... ...
hello-world latest ... ... ...
alpine latest ... ... ...
alpine 3.14 ... ... ...
alpine 3.15 ... ... ...
...
이는 레지스트리 호스트 이름을 지정하여 기본 Docker Hub 가 아닌 레지스트리에서 이미지를 가져오는 방법을 보여줍니다.
요약
이 랩에서는 docker pull 명령을 사용하여 레지스트리에서 Docker 이미지를 다운로드하는 방법을 배웠습니다. 특정 버전을 얻는 데 태그를 지정하는 것이 중요하다는 것을 이해하면서, 태그를 사용하여 Docker Hub 에서 특정 이미지를 가져오는 것으로 시작했습니다. 또한 docker images 명령을 사용하여 로컬에서 다운로드한 이미지를 보는 방법도 배웠습니다.
이 랩에서는 태그 변경과 관계없이 동일한 이미지 버전을 검색할 수 있도록 불변 다이제스트 (immutable digest) 를 사용하여 이미지를 가져오는 방법을 추가로 보여주었습니다. 또한 레포지토리에서 태그된 모든 이미지를 가져오고 Docker Hub 가 아닌 다른 레지스트리에서 이미지를 가져와 다양한 소스에서 이미지에 액세스하는 능력을 확장했습니다.



