다음과 같이 sha256 코드를 사용하여 centos, tomcat, …의 이미지를 가져오고 싶습니다.
docker pull myimage@sha256:0ecb2ad60
하지만 어디에서나 사용할 sha256 코드를 찾을 수 없습니다.
sha256 코드에 대한 힌트가 있는지 dockerhub 저장소를 확인했지만 찾을 수 없었습니다. 태그로 이미지를 다운로드했습니다.
docker pull tomcat:7-jre8
docker inspect
메타 데이터에 sha256 코드가 있는지 확인하기 위해 이미지를 확인 했지만 아무것도 없습니다 (이미지의 sha256 코드를 추가하면 sha256 코드가 변경 될 수 있음).
이미지의 sha256 코드를 직접 계산하고 사용해야합니까?
답변
최신 답변
댓글에서 OhJeez가 제안한 편집.
docker inspect --format='{{index .RepoDigests 0}}' $IMAGE
원래 답변
나는 당신이 또한 이것을 사용할 수 있다고 믿습니다
docker inspect --format='{{.RepoDigests}}' $IMAGE
Docker 1.9에서만 작동하며 이미지가 원래 다이제스트에서 가져온 경우에만 작동합니다. 자세한 내용은 도커 문제 추적기에 있습니다.
답변
당신은 그것을 얻을 수 있습니다 docker images --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
docker/ucp-agent 2.1.0 sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3 583407a61900 3 weeks ago 22.3 MB
답변
방금 본 것 :
이미지를 가져 오면 출력 하단에 sha256 코드가 표시됩니다 (다이제스트 : sha ….).
docker pull tomcat:7-jre8
7-jre8: Pulling from library/tomcat
902b87aaaec9: Already exists
9a61b6b1315e: Already exists
...
4dcef5c50d60: Already exists
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for tomcat:7-jre8
이 샤 코드
sha256 : c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
나중에 이미지를 당기는 데 사용할 수 있습니다.
docker pull tomcat @ sha256 : c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
이렇게하면 이미지가 변경되지 않고 프로덕션에 안전하게 사용할 수 있습니다.
답변
가장 간단하고 간결한 방법은 다음과 같습니다.
docker images --no-trunc --quiet $IMAGE
이것은 sha256:...
문자열 만 반환 하고 다른 것은 반환 하지 않습니다.
예 :
$ docker images --no-trunc --quiet debian:stretch-slim
sha256:220611111e8c9bbe242e9dc1367c0fa89eef83f26203ee3f7c3764046e02b248
편집하다:
참고 : 이것은 로컬 이미지에 대해서만 작동합니다. docker pull $IMAGE
필요한 경우 먼저 할 수 있습니다 .
답변
기존 답변 외에도 가지고있는 모든 이미지에 대한 요약 목록을 가져 오는 --digests
동안 옵션을 사용할 docker images
수 있습니다.
docker images --digests
grep을 추가하여 더 드릴 다운 할 수 있습니다.
docker images --digests | grep tomcat
답변
이전에 사용되지 않는 Docker Hub API 에서 볼 수있는 Id 필드 여야 합니다.
GET /v1/repositories/foo/bar/images HTTP/1.1
Host: index.docker.io
Accept: application/json
Parameters:
namespace – the namespace for the repo
repo_name – the name for the repo
응답 예 :
HTTP/1.1 200
Vary: Accept
Content-Type: application/json
[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]
그러나 이것은 새로운 도커 배포판 에서 현재 작동하는 방식 이 아닙니다 . 문제 628 : “태그 이름으로 이미지 ID 가져 오기”
참조
/v1/
레지스트리 응답/repositories/<repo>/tags
태그 핸들과 함께 이미지 ID를 나열하는 데 사용.
/v2/
핸들을주는 것 같습니다.로컬에서 찾은 ID와 비교할 ID를 가져 오는 것이 유용합니다. 내가 ID를 찾을 수있는 유일한 위치
v1Compat
는 매니페스트 의 섹션입니다 (원하는 정보에 대해 과도 함).
현재 (2015 년 중반) 답변은 다음과 같습니다.
V1 API의이 속성은 이미지가 백엔드에 저장되는 방식에 대해 계산 비용이 많이 들었습니다. 2 차 조회를 피하기 위해 태그 이름 만 열거됩니다.
또한 V2 API는 이미지 ID를 처리하지 않습니다. 오히려 다이제스트를 사용하여 계층을 식별하며 계층의 속성으로 계산할 수 있고 독립적으로 검증 할 수 있습니다.
답변
위의 방법이 어떤 경우에는 작동하지 않는 것으로 나타났습니다. 다음 중 하나입니다.
- 동일한 해시를 가진 여러 이미지를 잘 처리하지 마십시오 (.RepoDigests 제안의 경우-특정 레지스트리 경로를 사용하려는 경우)
- 이미지를 레지스트리로 푸시 할 때 제대로 작동하지 않습니다 (레지스트리의 해시가 아닌 로컬 해시 인 .Id의 경우).
아래 방법은 섬세하지만 특정 푸시 된 컨테이너에 대한 특정 전체 ‘이름’과 해시를 추출하는 데 사용됩니다.
시나리오는 다음과 같습니다. 이미지는 동일한 저장소에있는 2 개의 다른 프로젝트에 별도로 업로드되므로 RepoDigests를 쿼리하면 2 개의 결과가 반환됩니다.
$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest
[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]
알파 결과를 사용하고 싶지만 어떤 인덱스가 될지 예측할 수 없습니다. 따라서 대괄호를 제거하고 각 항목을 별도의 줄에 표시하려면 텍스트 출력을 조작해야합니다. 거기에서 결과를 쉽게 확인할 수 있습니다.
$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha
gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed