프라이빗 Docker Registry를 사용하는 방법
Private Docker Registry 환경에서 이미지 로그인, Pull/Push, 조회, 삭제, GC까지의 전체 사용 방법입니다.
1. Docker Registry 로그인
Private Registry에 접근하기 위해 먼저 로그인한다.
docker login -u admin https://dockerhub.scbyun.com:5000
docker login -u admin https://dockerhub.scbyun.com:5000
$ docker login -u admin https://dockerhub.scbyun.com:5000
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
2. 이미지 다운로드 (docker pull)
Registry에 저장된 이미지를 로컬로 다운로드한다.
docker pull dockerhub.scbyun.com:5000/apache-php:latest
docker pull dockerhub.scbyun.com:5000/apache-php:latest
$ docker pull dockerhub.scbyun.com:5000/apache-php:latest
latest: Pulling from apache-php
2d473b07cdd5: Already exists
1c21b49fc204: Pull complete
ebb71476cd11: Pull complete
7c0c0d52b79c: Pull complete
Digest: sha256:e8b8bfee0020b8ea9b782446c067e9069e238c9dee4dd3870d3777571b4f586b
Status: Downloaded newer image for dockerhub.scbyun.com:5000/apache-php:latest
dockerhub.scbyun.com:5000/apache-php:latest
3. 이미지 업로드 (docker push)
로컬 이미지를 Registry에 업로드한다.
docker push dockerhub.scbyun.com:5000/apache-php:latest
docker push dockerhub.scbyun.com:5000/apache-php:latest
$ docker push dockerhub.scbyun.com:5000/apache-php:latest
The push refers to repository [dockerhub.scbyun.com:5000/apache-php]
0d2cbbf556cd: Layer already exists
9e2c1ea8dc21: Layer already exists
174f56854903: Layer already exists
latest: digest: sha256:e8b8bfee0020b8ea9b782446c067e9069e238c9dee4dd3870d3777571b4f586b size: 3265
4. Registry 내부 Repository 목록 조회
Registry에 등록된 Repository 목록을 조회한다.
curl <ID>:<PASSWORD>@<REGISTRY URL:PORT>/v2/_catalog
curl https://admin:admin@dockerhub.scbyun.com:5000/v2/_catalog
$ curl https://admin:admin@dockerhub.scbyun.com:5000/v2/_catalog
{"repositories":["apache-php","centos"]}
5. Repository의 Tag 목록 조회
특정 이미지(repository)에 등록된 Tag 목록을 조회한다.
curl <ID>:<PASSWORD>@<REGISTRY URL:PORT>/v2/<IMAGE NAME>/tags/list
curl https://admin:admin@dockerhub.scbyun.com:5000/v2/apache-php/tags/list
curl https://admin:admin@dockerhub.scbyun.com:5000/v2/apache-php/tags/list
{"name":"apache-php","tags":["0.0.1","latest"]}
6. 매니페스트 정보 조회 (Digest 확인)
이미지 삭제를 위해 Manifest Digest 값을 조회한다.
curl -v -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
<ID>:<PASSWORD>@<REGISTRY URL:PORT>/v2/<IMAGE NAME>/manifests/<TAG NAME> 2>&1 \
| grep Docker-Content-Digest | awk '{print ($3)}'
curl 옵션
- -v, --verbose
- -H, --header
curl -v -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
https://admin:admin@dockerhub.scbyun.com:5000/v2/apache-php/manifests/0.0.1 2>&1 \
| grep Docker-Content-Digest | awk '{print ($3)}'
$ curl -v -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
> https://admin:admin@dockerhub.scbyun.com:5000/v2/apache-php/manifests/0.0.1 2>&1 \
> | grep Docker-Content-Digest | awk '{print ($3)}'
sha256:f9d01a495f8e1a5d2dc7f04c98be5f05ab2f0390888e511a53d0fdc0bbfde4e3
7. 매니페스트 Digest 기반 이미지 삭제
조회한 Digest 값을 사용하여 이미지를 삭제한다.
curl -v -XDELETE <ID>:<PASSWORD>@<REGISTRY URL:PORT>/v2/<IMAGE NAME>/manifests/<DIGEST>
curl 옵션
- -v, --verbose
- -X, --request COMMAND Specify request command to use
- --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS
- --retry NUM Retry request NUM times if transient problems occur
- --retry-delay SECONDS When retrying, wait this many seconds between each
- --retry-max-time SECONDS Retry only within this period
curl -v -XDELETE https://admin:admin@dockerhub.scbyun.com:5000/v2/apache-php/manifests/sha256:e8b8bfee0020b8ea9b782446c067e9069e238c9dee4dd3870d3777571b4f586b
$ curl -v -XDELETE \
https://admin:admin@dockerhub.scbyun.com:5000/v2/apache-php/manifests/sha256:e8b8bfee0020b8ea9b782446c067e9069e238c9dee4dd3870d3777571b4f586b
* About to connect() to dockerhub.scbyun.com port 5000 (#0)
* Trying 211.239.123.212...
* Connected to dockerhub.scbyun.com (211.239.123.212) port 5000 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
* subject: CN=dockerhub.scbyun.com
* start date: Mar 17 05:36:28 2022 GMT
* expire date: Jun 15 05:36:27 2022 GMT
* common name: dockerhub.scbyun.com
* issuer: CN=R3,O=Let's Encrypt,C=US
* Server auth using Basic with user 'admin'
> DELETE /v2/apache-php/manifests/sha256:e8b8bfee0020b8ea9b782446c067e9069e238c9dee4dd3870d3777571b4f586b HTTP/1.1
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.29.0
> Host: dockerhub.scbyun.com:5000
> Accept: */*
>
< HTTP/1.1 202 Accepted
< Docker-Distribution-Api-Version: registry/2.0
< Date: Mon, 28 Mar 2022 09:28:45 GMT
< Content-Length: 0
<
* Connection #0 to host dockerhub.scbyun.com left intact
8. Garbage Collection (디스크 공간 정리)
삭제된 이미지의 실제 Layer 데이터를 제거한다.
docker-compose exec registry registry garbage-collect /etc/docker/registry/config.yml
docker-compose exec registry registry garbage-collect /etc/docker/registry/config.yml
$ docker-compose exec registry registry garbage-collect /etc/docker/registry/config.yml
apache-php
apache-php: marking manifest sha256:c7c959a30104de547d09bdd32ff7d205917c44d100af2651142dc08cf5556ea2
apache-php: marking blob sha256:31723d898881b03d0938162fcb354bb37dbde8d0a908b471e04872a79f960f86
apache-php: marking blob sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc
...
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/29/2994e53ea3cd3d343611a5cc6864afd9ac0a78526e6e23795a06466082dee6a9 go.version=go1.16.15 instance.id=4730ce40-112b-4bbf-8413-17be55568a55 service=registry
blob eligible for deletion: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/a3/a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 go.version=go1.16.15 instance.id=4730ce40-112b-4bbf-8413-17be55568a55 service=registry
'리눅스' 카테고리의 다른 글
| [draft] sysfsutils 설치 및 systool 명령어 사용하는 방법 (0) | 2026.02.19 |
|---|---|
| [draft] 우분투에서 로컬 APT 리포지토리 서버를 apt-mirror를 사용하여 구축하는 방법 (0) | 2026.02.19 |
| [draft] Logrotate를 설정하는 방법 (0) | 2026.02.19 |
| [draft] 우분투에서 needrestart를 설치하고 사용하는 방법 (0) | 2026.02.19 |
| [draft] mkpasswd 명령어 (0) | 2026.02.19 |