도커 레지스트리 v2에서 이미지 목록을 가져오는 방법
도커 레지스트리 v1을 사용하고 있으며 최신 버전인 v2로 마이그레이션하는 데 관심이 있습니다.그러나 레지스트리에 있는 이미지 목록을 가져올 방법이 필요합니다. 예를 들어 레지스트리 v1을 사용하여 GET 요청을 실행할 수 있습니다.http://myregistry:5000/v1/search?
결과는 다음과 같습니다.
{
"num_results": 2,
"query": "",
"results": [
{
"description": "",
"name": "deis/router"
},
{
"description": "",
"name": "deis/database"
}
]
}
하지만 저는 공식 문서에서 레지스트리에 있는 이미지 목록과 비슷한 것을 찾을 수 없습니다.새 버전 v2에서 할 수 있는 방법 아는 사람?
레지스트리 V2의 최신 버전(2015-07-31 기준)의 경우 Docker에서 이 이미지를 얻을 수 있습니다.허브:
docker pull distribution/registry:master
모든 리포지토리 나열(효과적인 이미지):
curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}
리포지토리에 대한 모든 태그 나열:
curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}
를 ""에서 .curl
curl -X GET -u <user>:<pass> https://myregistry:5000/v2/_catalog
curl -X GET -u <user>:<pass> https://myregistry:5000/v2/ubuntu/tags/list
검색할 수 있습니다.
http://
<ip/hostname>
:<port>
/v2/_cisco
카탈로그 가져오기
기본적으로 레지스트리 api는 100개의 카탈로그 항목을 반환하며 코드는 다음과 같습니다.
레지스트리 api를 컬링하는 경우:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
다음과 같습니다.
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100
이것은 페이지화 방법입니다.
항목의 합계가 100을 초과하는 경우 다음 두 가지 방법으로 수행할 수 있습니다.
첫 번째: 더 큰 번호를 지정합니다.
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000
두 번째: 다음 링커 URL을 구문 분석
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
응답 헤더에 포함된 링크 요소:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
응답 헤더:
Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"
링크 요소에 이 요청의 마지막 항목이 있으면 다음 '페이지'를 요청할 수 있습니다.
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws
응답 헤더에 링크 요소가 포함된 경우 루프에서 이를 수행할 수 있습니다.
이미지 가져오기
카탈로그 결과는 다음과 같습니다.
{
"repositories": [
"busybox",
"ceph/mds"
]
}
모든 카탈로그에서 이미지를 가져올 수 있습니다.
curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list
반환:
{"name":"busybox","tags":["latest"]}
https://github.com/docker/distribution 에서 제공되는 도커 레지스트리의 최신 버전은 Catalog API(v2/_http)를 지원합니다.이를 통해 리포지토리를 검색할 수 있습니다.
관심이 있다면 새로운 도커 레지스트리 배포판(https://github.com/vivekjuneja/docker_registry_cli) 에서 검색 기능을 쉽게 사용할 수 있도록 구축된 도커 이미지 레지스트리 CLI를 사용해 볼 수 있습니다.
이것은 저를 미치게 만들었지만, 저는 마침내 모든 조각들을 정리했습니다.2015년 1월 25일 기준으로 도커 V2 레지스트리에 이미지를 나열하는 것이 가능하다는 것을 확인했습니다(위에서 언급한 @jonatan과 정확히 일치함).
만약 제가 그것에 대한 평판이 있다면, 저는 그 대답에 찬성표를 던질 것입니다.
대신에, 저는 그 답에 대해 더 자세히 설명할 것입니다.레지스트리 V2는 보안을 염두에 두고 만들어졌으므로 자체 서명된 인증서로 설정하는 방법을 포함하고 해당 인증서로 https 호출을 수행할 수 있도록 컨테이너를 실행하는 것이 적절하다고 생각합니다.
레지스트리를 시작하는 데 실제로 사용하는 스크립트는 다음과 같습니다.
sudo docker stop registry
sudo docker rm -v registry
sudo docker run -d \
-p 5001:5001 \
-p 5000:5000 \
--restart=always \
--name registry \
-v /data/registry:/var/lib/registry \
-v /root/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
registry:2.2.1
어떤 사람들에게는 이것이 명백할 수도 있지만, 저는 항상 열쇠와 확실한 것들을 혼동합니다.**를 (는 제가 .crt를 @jonaton에 넣었기 때문입니다.)/root
액세스할 수 있는 사용자 디렉토리에 복사본을 만들었습니다.)
curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}
**위의 명령어가 변경되었습니다: -XGET은 제가 시도했을 때 실제로 작동하지 않았습니다.
참고:https://myregistry:5000
(위와 같이) 생성된 인증서에 지정된 도메인과 일치해야 합니다.
우리는 이 목적을 위해 CLI 도구를 작성했습니다: docker-ls 도커 레지스트리를 탐색할 수 있으며 토큰 또는 기본 인증을 통한 인증을 지원합니다.
여기 Repos 및 관련 태그 목록을 인쇄할 수 있는 멋진 작은 라이너(JQ 사용)가 있습니다.
만약 당신이 가지고 있지 않다면.jq
수 됨: 설되어사수있는항목:brew install jq
# This is my URL but you can use any
REPO_URL=10.230.47.94:443
curl -k -s -X GET https://$REPO_URL/v2/_catalog \
| jq '.repositories[]' \
| sort \
| xargs -I _ curl -s -k -X GET https://$REPO_URL/v2/_/tags/list
레지스트리: 2.1.1 이상(여기서 마지막 레지스트리를 확인할 수 있음)을 설치하고 GET /v2/_catalog를 사용하여 목록을 가져옵니다.
https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories
모든 이미지를 셸 스크립트별로 나열 예: https://gist.github.com/OndrejP/a2386d08e5308b0776c0
로컬 도커 저장소이기 때문에 로그인 세부 정보를 제공해야 한다는 점을 제외하고는 여기서 동일하게 작업해야 했습니다.
위와 같으나 URL에 사용자 이름/비밀번호를 제공합니다.
curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog
포맷되지 않은 JSON으로 돌아옵니다.
저는 사람이 읽기 쉽도록 파이썬 포맷터를 통해 파이프로 연결했습니다. 만약 당신이 이 포맷으로 그것을 가지고 싶어한다면요.
curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool
다음은 레지스트리에 있는 모든 이미지의 모든 태그를 나열하는 예제입니다.HTTP Basic 인증을 위해 구성된 레지스트리도 처리합니다.
THE_REGISTRY=localhost:5000
# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" .docker/config.json | base64 -d)
curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
jq -r '.["repositories"][]' | \
xargs -I @REPO@ curl -s --user $CREDS https://$THE_REGISTRY/v2/@REPO@/tags/list | \
jq -M '.["name"] + ":" + .["tags"][]'
설명:
- 사용자 이름 추출: .vmdker/config.json의 암호
- 레지스트리에 https 요청을 하여 모든 "저장소"를 나열합니다.
- json 결과를 리포지토리 이름의 플랫 목록으로 필터링
- 각 리포지토리 이름:
- 레지스트리에 https 요청을 하여 해당 "레지스트리"에 대한 모든 "디렉토리"를 나열합니다.
- 개체의 결과 스트림을 필터링하여 각 리포지토리에서 발견된 각 태그에 대해 "저장소": "태그" 쌍을 인쇄합니다.
"/v2/_catalog" 및 "/tags/list" 끝점을 사용하면 모든 이미지를 나열할 수 없습니다.몇 개의 다른 이미지를 누르고 "최신" 태그를 지정하면 이전 이미지를 나열할 수 없습니다!다이제스트 "docker pull unbubuntu@sha256:ac13c5d2..."를 사용하여 참조하더라도 여전히 풀링할 수 있습니다. 따라서 답은 - 동일하지 않은 태그만 나열할 수 있는 이미지를 나열할 수 있는 방법이 없습니다.
저는 다양한 방법으로 이미지를 나열하는 사용하기 쉬운 명령줄 도구를 작성했습니다(예: 모든 이미지 나열, 해당 이미지의 모든 태그 나열, 해당 태그의 모든 계층 나열).
또한 단일 이미지의 오래된 태그만 삭제하거나 모든 이미지에서 삭제하는 등 다양한 방법으로 사용하지 않는 이미지를 삭제할 수 있습니다.CI 서버에서 레지스트리를 채우는 경우 최신/안정 버전만 유지하려는 경우에 편리합니다.
파이썬으로 작성되었으며 부피가 큰 커스텀 레지스트리 이미지를 다운로드할 필요가 없습니다.
만약 누군가가 여기까지 간다면요.
다른 사람들이 위에서 이미 말한 것을 받아들입니다.여기에 답을 형식이 지정된 텍스트 파일인 json에 입력하는 한 줄기가 있습니다.
curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst
이거 약간.
{
"repositories": [
"somerepo/somecontiner",
"somerepo_other/someothercontiner",
...
]
}
컨테이너 수와 일치하도록 '?n=xxxx'를 변경해야 할 수도 있습니다.
다음은 오래된 용기와 사용하지 않은 용기를 자동으로 제거하는 방법입니다.
이 스레드는 오래 전으로 거슬러 올라가며, 고려해야 할 가장 최근의 도구는 및 입니다.
skopeo
서명을 지원하며 다른 많은 기능이 있습니다.crane
좀 더 미니멀리즘적이고 간단한 셸 스크립트 내에서 통합하는 것이 더 쉽다는 것을 알게 되었습니다.
도커 검색 레지스트리 v2 기능은 현재 이 글을 쓰는 시점에서 지원되지 않습니다.2015년 2월 이후의 토론 참조: "등록부 검색 기능 #discovery" https://github.com/docker/distribution/issues/206
저는 스크립트를 작성했습니다. view-private-details. https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 은 예쁘지는 않지만 개인 레지스트리에서 필요한 정보를 얻을 수 있습니다.
view-private-registry의 출력 예:
$ view-private-registry`
busybox:latest
gcr.io/google_containers/etcd:2.0.9
gcr.io/google_containers/hyperkube:v0.21.2
gcr.io/google_containers/pause:0.8.0
google/cadvisor:latest
jenkins:latest
logstash:latest
mongo:latest
nginx:latest
python:2.7
redis:latest
registry:2.1.1
stackengine/controller:latest
tomcat:7
tomcat:latest
ubuntu:14.04.2
Number of images: 16
Disk space used: 1.7G /mnt/three/docker-registry/registry-data
모든 이미지를 태그와 함께 나열하는 라이너 바시:
curl --user user:pass https://myregistry.com/v2/_catalog | jq .repositories | sed -n 's/[ ",]//gp' | xargs -L1 -IIMAGE curl -s --user user:pass https://myregistry.com/v2/IMAGE/tags/list | jq '. as $parent | .tags[] | $parent.name + ":" + . '
이미지 이름에서 검색할 두 줄:
search=my_container_part_name
curl --user user:pass https://registry.medworx.io/v2/_catalog | jq .repositories | sed -n '/'"$search"'/{s/[ ",]//gp;}' | xargs -L1 -IIMAGE curl -s --user user:pass https://registry.medworx.io/v2/IMAGE/tags/list | jq '. as $parent | .tags[] | $parent.name + ":" + . '
대체: user, pass 및 myregistry.com 를 적절히 사용합니다.
curl, sed, xargs, jq를 사용하며 이해하기 어렵습니다...하지만 그것은 효과가 있습니다.이미지당 한 통화 + 1을 생성합니다.
여기서 허용된 답변이 빈 줄만 반환하는 경우 레지스트리 서버의 ssl/tls 인증서 때문일 수 있습니다.--insecure 플래그를 사용합니다.
curl --insecure https://<registryHostnameOrIP>:5000/v2/_catalog
도커 레지스트리 컨테이너에 ssh 또는 연결할 수 있는 경우 파일 시스템을 탐색하여 다음과 같은 원하는 항목을 찾습니다.
kubectl exec -it docker-registry-0 -- /bin/sh
ls /var/lib/registry/docker/registry/v2/repositories
ls /var/lib/registry/docker/registry/v2/repositories/busybox/_manifests/tags/
다음은 자체 호스팅 레지스트리의 카탈로그 및 태그 목록을 보고 탐색하는 간단한 bash 스크립트입니다.레지스트리 도커 이미지에 노출된 API를 사용합니다.가지고 계신다면,jless
설치되어 있어 보기가 조금 더 좋습니다.
#!/bin/bash
REGISTRY="https://my.registry.internal:5000"
curl -s GET $REGISTRY/v2/_catalog
echo "Enter name to get tags:"
read REPO
if command -v jless &> /dev/null
then
curl -s GET $REGISTRY/v2/$REPO/tags/list | jless
else
curl -s GET $REGISTRY/v2/$REPO/tags/list
fi
각 레지스트리는 컨테이너로 실행되므로 컨테이너 ID는 연결된 로그 파일 ID-json.log를 가집니다. 이 로그 파일에는 vars.name=[image] 및 vars.reference=[tag]가 포함됩니다.스크립트를 사용하여 이를 추정하고 인쇄할 수 있습니다.이 방법은 레지스트리 V2-2.0.1에 푸시된 이미지를 나열하는 방법 중 하나일 수 있습니다.
사용 사례에서 프로덕션용으로 서명된 이미지와 신뢰할 수 있는 이미지만 식별하는 경우 이 방법이 유용합니다.
모든 서명된 태그에 대한 도커 이미지 레포를 구문 분석하고 모든 JSON 형식을 제거하여 깨끗한 이미지 태그만 토해냅니다.물론 어떤 것이 당신의 요구사항에 따라 추가로 처리될 수 있습니다.
명령 형식:
docker trust inspect imageName | grep "SignedTag" | awk -F'"' '{print $4}'
nginx & Bitnami Docker 저장소를 사용하는 예:
docker trust inspect nginx | grep "SignedTag" | awk -F'"' '{print $4}'
docker trust inspect bitnami/java | grep "SignedTag" | awk -F'"' '{print $4}'
서명된 이미지가 없으면 No signatures 또는 canot access imageName이 반환됩니다.
Wordpress Docker repo를 사용한 서명된 이미지가 없는 repo(이 문서 작성 당시)의 예:
docker trust inspect wordpress | grep "SignedTag" | awk -F'"' '{print $4}'
레지스트리에 대한 멋진 웹 인터페이스를 원하는 경우 이 레지스트리 브라우저 도커 이미지를 사용할 수 있습니다.레지스트리, 다른 리포지토리 및 태그를 둘러보려는 경우 유용합니다.
언급URL : https://stackoverflow.com/questions/31251356/how-to-get-a-list-of-images-on-docker-registry-v2
'programing' 카테고리의 다른 글
컨테이너 오버라이드 프로세서의 MariaDB가 60%로 증가 (0) | 2023.09.09 |
---|---|
Docker-Compose를 사용할 때 Django 데이터베이스 마이그레이션을 어떻게 수행합니까? (0) | 2023.09.09 |
기본 방법 대신 인증 쿠키를 수동으로 만들려면 어떻게 해야 합니까? (0) | 2023.09.04 |
장고 형태의 CSS 스타일링 (0) | 2023.09.04 |
어떻게 쿼리가 각 행 MySQL에 대해 2개의 셀을 곱할 수 있습니까? (0) | 2023.09.04 |