docker image push 명령어를 사용하여 이미지 업로드 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker image push 명령을 사용하여 Docker 이미지를 레지스트리에 업로드하는 방법을 배우게 됩니다. 이 과정은 사용자 정의 이미지를 다른 사람과 공유하거나 다른 환경에 배포하는 데 필수적입니다.

먼저 실행 중인 컨테이너 내에서 변경 사항을 커밋하여 새 이미지를 생성하는 것으로 시작합니다. 그런 다음, 푸시하기 전에 중요한 단계인 특정 레지스트리에 맞게 이 이미지를 적절하게 태깅하는 방법을 배우게 됩니다. 마지막으로, 태그된 이미지를 레지스트리에 푸시하는 연습을 할 것입니다. 여기에는 이미지와 관련된 모든 태그를 푸시하는 방법도 포함됩니다.

컨테이너를 새로운 이미지로 커밋하기

이 단계에서는 실행 중인 컨테이너 내에서 변경 사항을 새로운 Docker 이미지로 커밋하는 방법을 배우게 됩니다. 이는 소프트웨어를 설치하거나 파일을 구성하는 등 수정을 수행한 후 컨테이너의 상태를 저장하려는 경우에 유용합니다.

먼저, 간단한 Ubuntu 컨테이너를 실행해 보겠습니다. ubuntu 이미지를 사용합니다. 컨테이너 내부에서 변경 사항을 만들 것이므로, 의사 TTY(pseudo-TTY) 를 사용하여 대화형으로 실행해야 합니다.

docker run -it ubuntu

이제 Ubuntu 컨테이너의 셸 내부에 있어야 합니다. curl 패키지를 설치하는 것과 같은 간단한 변경을 해보겠습니다.

apt-get update
apt-get install -y curl

설치가 완료되면 exit를 입력하여 컨테이너의 셸을 종료합니다.

exit

이제 컨테이너를 종료했으므로, 변경 사항 (예: curl 설치) 은 해당 특정 컨테이너 인스턴스에 여전히 존재합니다. 이러한 변경 사항을 새 이미지로 저장하려면 컨테이너를 커밋해야 합니다.

먼저, 방금 종료한 컨테이너의 컨테이너 ID 를 찾습니다. docker ps -a 명령을 사용하여 종료된 컨테이너를 포함한 모든 컨테이너를 나열할 수 있습니다.

docker ps -a

ubuntu 이미지에서 생성된 컨테이너를 찾고 해당 CONTAINER ID를 기록해 둡니다.

이제 docker commit 명령을 사용하여 이 컨테이너에서 새 이미지를 생성합니다. 기본 구문은 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]입니다. 컨테이너를 커밋하고 새 이미지에 이름과 태그를 지정합니다. <CONTAINER_ID>를 실제로 찾은 ID 로 바꿉니다.

docker commit < CONTAINER_ID > my-ubuntu-with-curl:v1

이 명령은 v1 태그가 있는 my-ubuntu-with-curl이라는 새 이미지를 생성합니다. 로컬 이미지를 나열하여 새 이미지가 생성되었는지 확인할 수 있습니다.

docker images

이미지 목록에서 my-ubuntu-with-curl을 볼 수 있습니다. 이 새 이미지에는 컨테이너에 설치한 curl 패키지가 포함되어 있습니다.

특정 레지스트리에 대한 이미지 태깅

이 단계에서는 Docker 이미지를 특정 컨테이너 레지스트리에 푸시할 수 있도록 태깅하는 방법을 배우게 됩니다. 이미지를 레지스트리에 푸시할 때, 태그는 해당 레지스트리 내에서 이미지를 식별하는 데 사용됩니다. 레지스트리에 대한 이미지 태깅의 표준 형식은 [registry-hostname[:port]]/repository[:tag]입니다.

이전 단계에서 v1 태그가 있는 my-ubuntu-with-curl이라는 이미지를 생성했습니다. 이제 이 이미지를 가상의 레지스트리에 태깅해 보겠습니다. 데모 목적으로, 레지스트리 주소로 localhost:5000을 사용합니다.

docker tag 명령을 사용하여 기존 이미지에 대한 새 태그를 생성할 수 있습니다. 기본 구문은 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]입니다.

my-ubuntu-with-curl:v1 이미지를 가상 레지스트리에 태깅해 보겠습니다.

docker tag my-ubuntu-with-curl:v1 localhost:5000/my-ubuntu-with-curl:v1

이 명령은 my-ubuntu-with-curl:v1과 동일한 이미지를 가리키는 새 태그 localhost:5000/my-ubuntu-with-curl:v1을 생성합니다.

로컬 이미지를 다시 나열하여 새 태그가 추가되었는지 확인할 수 있습니다.

docker images

이제 localhost:5000/my-ubuntu-with-curl에 대한 항목이 v1 태그와 함께 표시되어야 합니다. 이는 이미지가 이제 태깅되었으며 localhost:5000의 레지스트리에 푸시할 준비가 되었음을 나타냅니다.

태그된 이미지를 레지스트리에 푸시

이 단계에서는 태그된 Docker 이미지를 컨테이너 레지스트리에 푸시하는 방법을 배우게 됩니다. 이미지를 푸시하면 다른 사용자가 풀 (pull) 하여 사용할 수 있게 됩니다.

로컬 레지스트리에 이미지를 푸시하기 전에, 레지스트리가 실행 중이어야 합니다. 이 랩에서는 임시 로컬 레지스트리 컨테이너를 실행합니다.

먼저, registry 이미지를 풀 (pull) 합니다.

docker pull registry:2

이제 레지스트리 컨테이너를 실행합니다. 호스트의 포트 5000 을 컨테이너의 포트 5000 에 매핑합니다.

docker run -d -p 5000:5000 --name local-registry registry:2

이 명령은 Docker 레지스트리를 실행하는 local-registry라는 이름의 분리된 컨테이너를 시작합니다.

이전 단계에서 my-ubuntu-with-curl:v1 이미지를 localhost:5000/my-ubuntu-with-curl:v1로 태깅했습니다. 이 태그에는 로컬 레지스트리 주소 (localhost:5000) 가 포함되어 있습니다.

이제 docker push 명령을 사용하여 이 태그된 이미지를 로컬 레지스트리에 푸시할 수 있습니다. 구문은 docker push NAME[:TAG]입니다.

docker push localhost:5000/my-ubuntu-with-curl:v1

푸시 작업의 진행 상황을 나타내는 출력이 표시되어야 하며, 푸시되는 레이어가 포함됩니다.

푸시가 완료되면 my-ubuntu-with-curl:v1 이미지가 이제 localhost:5000의 로컬 레지스트리에 저장됩니다.

이미지의 모든 태그 푸시

이 단계에서는 특정 이미지와 관련된 모든 태그를 컨테이너 레지스트리에 푸시하는 방법을 배우게 됩니다. 때로는 동일한 이미지를 가리키는 여러 태그 (예: latest, v1.0, stable) 가 있을 수 있습니다. 이러한 모든 태그를 단일 명령으로 푸시할 수 있습니다.

이전 단계에서 my-ubuntu-with-curl 이미지를 생성하고 v1localhost:5000/my-ubuntu-with-curl:v1로 태깅했습니다. 이 이미지에 다른 태그를 추가해 보겠습니다. 로컬 레지스트리에 대해 latest로 태깅합니다.

docker tag 명령을 다시 사용하여 latest 태그를 추가합니다.

docker tag my-ubuntu-with-curl:v1 localhost:5000/my-ubuntu-with-curl:latest

이제 이미지를 나열하여 새 태그를 확인합니다.

docker images

이제 localhost:5000/my-ubuntu-with-curlv1latest 태그를 모두 표시하며, 둘 다 동일한 이미지 ID 를 가리키는 것을 볼 수 있습니다.

이 이미지의 모든 태그를 로컬 레지스트리에 푸시하려면, 태그를 지정하지 않고 레포지토리 이름을 사용하여 docker push 명령을 사용할 수 있습니다.

docker push localhost:5000/my-ubuntu-with-curl

Docker 는 localhost:5000/my-ubuntu-with-curl 레포지토리와 관련된 모든 태그를 식별하고 각 태그를 레지스트리에 푸시합니다. v1latest 태그 모두에 대한 푸시 진행 상황을 나타내는 출력이 표시됩니다.

푸시가 완료되면 이미지의 두 버전 (v1latest) 이 로컬 레지스트리에서 사용 가능합니다.

요약

이 랩에서는 실행 중인 Docker 컨테이너 내에서 변경 사항을 새로운 이미지에 커밋하는 방법을 배웠습니다. 이 프로세스에는 컨테이너 실행, 내부 수정 (예: 소프트웨어 설치), 컨테이너 종료, 컨테이너 ID 식별, 그리고 docker commit 명령을 사용하여 컨테이너의 상태를 기반으로 새로운 이미지를 생성하는 작업이 포함됩니다. 또한 새로 생성된 이미지에 이름과 태그를 할당하고 docker images를 사용하여 해당 존재 여부를 확인하는 방법도 배웠습니다.