Regclient
regclient is an OCI client for registry servers and the OCI Image Layout.
regctl
설치 방법 (단일 바이너리)
curl -L https://github.com/regclient/regclient/releases/latest/download/regctl-linux-amd64 \
-o ~/.local/bin/regctl && chmod +x ~/.local/bin/regctl
Body 크기 제한에 걸린 레지스터에 업로드 방법
예를 들면 Cloudflare 프록시(터널 포함)는 요청 body 크기 제한이 걸립니다 — Free/Pro 100MB, Business 200MB, Enterprise 500MB. docker push는 레이어 blob을 한 방에 monolithic PATCH 로 올리기 때문에 100MB 넘는 레이어에서 바로 413 Error 로 죽습니다.
Docker CLI / skopeo / crane은 모두 blob을 통째로 올려서 우회가 안 되는데, regclient만 "chunked blob upload" 를 지원합니다. 청크 크기를 제한 밑으로 낮추면 터널 그대로 두고 푸시됩니다.
# 1) 로그인 (password 는 컨테이너 레지스트리 PAT)
regctl registry login mlops-api-dev.unwiki.net -u <테넌트코드> -p <PAT>
# 2) 32MB 넘는 blob 은 32MB 청크로 쪼개 보내도록 설정
regctl registry set mlops-api-dev.unwiki.net --blob-chunk 33554432 --blob-max 33554432
# 3) tar 로 떠서 밀어넣기 (regctl 은 docker daemon 을 못 읽으므로 save 가 필요)
docker save itl/asm-trainer:v3 -o asm-trainer-v3.tar
regctl image import mlops-api-dev.unwiki.net/itl/asm-trainer:v3 asm-trainer-v3.tar
# 4) 확인
regctl tag ls mlops-api-dev.unwiki.net/itl/asm-trainer
또는 다른 레지스트리에서 바로 복사 (multi-arch 매니페스트도 그대로 유지):
--blob-max보다 큰 blob은 --blob-chunk 단위로 분할 전송됩니다.
단, 레지스트리 쪽이 chunked PATCH 를 지원해야 합니다.
- 자체 호스팅
registry:2(distribution), Harbor, ECR은 OK. - GCP Artifact Registry 계열은 chunked를 제대로 안 받으니 이 방법이 안 통합니다.