docker image push

docker image push

이미지를 레지스트리에 업로드하는 명령어예요.

출처: 문서

본문

docker image push는 이미지를 Docker Hub 레지스트리나 셀프 호스트 레지스트리로 공유해요.

Usage: docker image push [OPTIONS] NAME[:TAG]
항목 내용
Description 이미지를 레지스트리에 업로드
Aliases docker push

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

docker image push 프로세스를 죽이면(예: 터미널에서 실행 중 CTRL-c 누르기) push 작업이 종료돼요.

docker push 동안 진행 막대가 표시되는데, 압축되지 않은 크기를 보여줘요. 실제로 push되는 데이터 양은 전송 전에 압축되므로, 업로드된 크기는 진행 막대에 반영되지 않아요.

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

동시 업로드

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

옵션

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

새 이미지를 레지스트리로 push

먼저 docker container ls로 컨테이너 ID를 찾고, 새 이미지 이름으로 커밋해 새 이미지를 저장해요. 이미지 이름을 지을 때는 a-z0-9-_.만 허용된다는 점에 유의하세요.

$ docker container commit c16378f943fe rhel-httpd:latest

이제 이미지 ID로 이미지를 레지스트리에 push해요. 이 예시에서 레지스트리는 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 둘 다 나열되는 걸 볼 수 있어요.

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

-a(또는 --all-tags) 옵션을 써서 로컬 이미지의 모든 태그를 push해요.

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

$ 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 옵션으로 push하면 registry-host:5000/myname/myimage 이미지의 모든 태그가 push돼요.

$ 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

더 알아보기