docker image push

docker image push

이미지를 레지스트리에 업로드하는 명령이에요. Docker Hub나 자기 호스트 레지스트리에 이미지를 공유할 때 사용해요. 별칭으로 docker push를 쓸 수 있어요.

출처: 문서

본문

docker image push로 이미지를 Docker Hub 레지스트리나 자기 호스트 레지스트리에 공유해요.

유효한 이미지·태그 이름에 대한 자세한 내용은 docker image tag 참조를 참고해요.

터미널에서 실행 중 CTRL-c를 눌러 docker image push 프로세스를 종료하면 푸시 작업이 끝나요.

docker push 중에는 압축되지 않은 크기를 보여주는 진행률 표시줄이 표시돼요. 실제 푸시되는 데이터 양은 보내기 전에 압축되므로, 업로드된 크기는 진행률 표시줄에 반영되지 않아요.

레지스트리 자격 증명은 docker login이 관리해요.

docker image push [OPTIONS] NAME[:TAG]

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
-a, --all-tags 이미지의 모든 태그를 저장소로 푸시
--platform API 1.46+ 플랫폼별 매니페스트를 단일 플랫폼 이미지로 레지스트리에 푸시. 이미지 인덱스는 푸시되지 않아 attestation을 포함한 다른 매니페스트는 보존되지 않아요. 'os[/arch[/variant]]': 명시적 플랫폼 (예: linux/amd64)
-q, --quiet 상세 출력 억제

동시 업로드

기본적으로 Docker 데몬은 이미지의 레이어 다섯 개를 한 번에 푸시해요. 대역폭이 낮은 연결이라면 타임아웃 문제가 생길 수 있는데, --max-concurrent-uploads 데몬 옵션으로 낮출 수 있어요. 자세한 내용은 데몬 문서를 참고해요.

레지스트리에 새 이미지 푸시

먼저 컨테이너 ID를 찾아(docker container ls 사용) 새 이미지 이름으로 커밋해 새 이미지를 저장해요. 이미지 이름에는 a-z0-9-_.만 허용된다는 점을 기억해요.

$ docker container commit c16378f943fe rhel-httpd:latest

이제 이미지 ID를 사용해 레지스트리로 푸시해요. 이 예제에서 레지스트리는 registry-host라는 호스트에 있고 포트 5000에서 수신해요. 이렇게 하려면 이미지에 레지스트리의 호스트 이름 또는 IP 주소와 포트를 태그로 지정해요.

$ docker image tag rhel-httpd:latest registry-host:5000/myadmin/rhel-httpd:latest

$ docker image push registry-host:5000/myadmin/rhel-httpd:latest

제대로 됐는지 확인하려면:

$ docker image ls

rhel-httpdregistry-host:5000/myadmin/rhel-httpd가 모두 나열된 것을 볼 수 있어요.

이미지의 모든 태그 푸시 (-a, --all-tags)

-a(또는 --all-tags) 옵션으로 로컬 이미지의 모든 태그를 푸시해요.

다음 예제는 이미지에 여러 태그를 만들고, 그 태그를 모두 Docker Hub에 푸시해요.

$ docker image tag myimage registry-host:5000/myname/myimage:latest
$ docker image tag myimage registry-host:5000/myname/myimage:v1.0.1
$ docker image tag myimage registry-host:5000/myname/myimage:v1.0
$ docker image tag myimage registry-host:5000/myname/myimage:v1

이제 이미지는 여러 이름으로 태그돼 있어요.

$ docker image ls

REPOSITORY                          TAG        IMAGE ID       CREATED      SIZE
myimage                             latest     6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   latest     6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   v1         6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   v1.0       6d5fcfe5ff17   2 hours ago  1.22MB
registry-host:5000/myname/myimage   v1.0.1     6d5fcfe5ff17   2 hours ago  1.22MB

--all-tags 옵션으로 푸시하면 registry-host:5000/myname/myimage 이미지의 모든 태그가 푸시돼요.

$ docker image push --all-tags registry-host:5000/myname/myimage

The push refers to repository [registry-host:5000/myname/myimage]
195be5f8be1d: Pushed
latest: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
195be5f8be1d: Layer already exists
v1: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
195be5f8be1d: Layer already exists
v1.0: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
195be5f8be1d: Layer already exists
v1.0.1: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527

더 알아보기