docker registry v1을 사용하고 있으며 최신 버전 인 v2로 마이그레이션하는 데 관심이 있습니다. 그러나 레지스트리에 이미지 목록을 표시하는 방법이 필요합니다. 예를 들어 레지스트리 v1을 사용하면 GET 요청을 실행할 수 http://myregistry:5000/v1/search?
있으며 결과는 다음과 같습니다.
{
"num_results": 2,
"query": "",
"results": [
{
"description": "",
"name": "deis/router"
},
{
"description": "",
"name": "deis/database"
}
]
}
그러나 공식 문서 에서 레지스트리의 이미지 목록을 얻는 것과 비슷한 것을 찾을 수 없습니다 . 새 버전 v2에서 수행하는 방법을 아는 사람이 있습니까?
답변
최신 버전 (2015-07-31 기준)의 레지스트리 V2의 경우 DockerHub 에서이 이미지 를 얻을 수 있습니다 .
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"]}
답변
당신은 검색 할 수 있습니다
http : //
<ip/hostname>
:<port>
/ v2 / _catalog
답변
카탈로그 받기
기본적으로 레지스트리 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
Sencond : 다음 링커 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 에서 사용 가능한 최신 버전의 Docker Registry 는 카탈로그 API를 지원합니다. (v2 / _catalog). 이를 통해 리포지토리를 검색 할 수 있습니다.
관심이 있으시면 새로운 Docker Registry 배포 ( https://github.com/vivekjuneja/docker_registry_cli ) 의 검색 기능 을 쉽게 사용할 수 있도록 구축 한 docker image registry CLI를 사용해 볼 수 있습니다
답변
이를 위해 CLI 도구를 작성했습니다. docker-ls docker 레지스트리를 탐색하고 토큰 또는 기본 인증을 통한 인증을 지원합니다.
답변
이것은 나를 미치게 만들었지 만 마침내 모든 조각을 모았습니다. 2015 년 1 월 5 일 현재 docker 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
이것은 일부에게는 분명 할 수 있지만 항상 키와 인증서가 섞여 있습니다. @jonaton을 호출하기 위해 참조해야하는 파일은 위에 언급 된 **입니다. (domain.crt을 넣었으므로 /root
액세스 할 수있는 사용자 디렉토리에 사본을 작성했습니다.)
curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}
** 위 명령이 변경되었습니다. -X GET을 시도해도 실제로 작동하지 않았습니다.
참고 : https://myregistry:5000
(위와 같이) 생성 된 인증서에 제공된 도메인과 일치해야합니다.
답변
registry : 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