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-httpd와 registry-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