반응형
Notice
Link
스택큐힙리스트
실행 중인 Docker 컨테이너에서 모든 이미지 태그를 찾는 방법은 다음과 같습니다. 본문
반응형
function getDigestByImageNameWithTag () {
TARGET_IMAGE_NAME_WITH_TAG=$1 # works with and without tag
docker image inspect --format '{{index .RepoDigests 0}}' $TARGET_IMAGE_NAME_WITH_TAG | cut -d '@' -f2
}
function getTagsByDigest () {
TARGET_IMAGE_NAME=$1
TARGET_DIGEST=$2
# 슬래시가 없는 경우 이미지 이름에 library/를 붙입니다
if [[ $TARGET_IMAGE_NAME != */* ]]; then
TARGET_IMAGE_NAME=library/$TARGET_IMAGE_NAME
fi
# 지정된 이미지 이름에 대한 인증 토큰 가져오기
TOKEN=$(curl -s https://auth.docker.io/token?service=registry.docker.io&scope=repository:$TARGET_IMAGE_NAME:pull | jq -r .token)
# 지정된 이미지 이름에 대한 모든 태그 찾기
ALL_TAGS=$(curl -s -H Authorization: Bearer $TOKEN https://index.docker.io/v2/$TARGET_IMAGE_NAME/tags/list | jq -r .tags[])
# 이러한 태그들에 대해 반복합니다
for TAG in ${ALL_TAGS[@]}; do
# 이미지 다이제스트 가져오기
DIGEST=$(curl -s -D - -H Authorization: Bearer $TOKEN -H Accept: application/vnd.docker.distribution.manifest.v2+json https://index.docker.io/v2/$TARGET_IMAGE_NAME/manifests/$TAG | grep Docker-Content-Digest | cut -d ' ' -f 2)
# 태그가 지정된 다이제스트와 일치하는 경우
if [[ $TARGET_DIGEST = $DIGEST ]]; then
# 태그를 반환합니다
echo $TAG
fi
done
}
function getContainerImageNames () {
docker inspect $(docker ps | awk '{print $2}' | grep -v ID) | jq .[].RepoTags | grep -v \[ | grep -v \] | grep | cut -d '' -f2 | cut -d '/' -f2-
}
# 모든 로컬 컨테이너의 모든 이미지 이름 가져오기
IMGS_WITH_TAG=$(getContainerImageNames)
# 이러한 이미지 이름에 대해 반복합니다
for IMAGE_NAME_WITH_TAG in ${IMGS_WITH_TAG[@]}; do
# 현재 반복의 IMAGE_NAME_WITH_TAG의 다이제스트 가져오기
DIGEST=$(getDigestByImageNameWithTag $IMAGE_NAME_WITH_TAG)
echo TARGET_DIGEST: $DIGEST
# 태그 없이 실제 이미지 이름 가져오기
IMAGE_NAME=$(echo $IMAGE_NAME_WITH_TAG | cut -d ':' -f1)
# 해당 다이제스트와 동일한 이 이미지의 모든 태그 찾기
MATCHING_TAGS=$(getTagsByDigest $IMAGE_NAME $DIGEST)
echo 이미지: $IMAGE_NAME_WITH_TAG
echo 이미지 다이제스트: $IMAGE_NAME
echo 동일한 다이제스트를 갖는 이미지 태그:
echo $MATCHING_TAGS
echo -----------------------------
done
불행히도 이 작업은 영원히 완료되는 것 같습니다. 제가 무언가 잘못하고 있는지 모르겠지만, 이게 제가 최선을 다한 것입니다.
이 작업을 제대로 작동시키는 방법에 대한 아이디어가 있으신가요?
답변 1
running_container=$(도커 ps | awk '{print $2}' | grep -v ID)
echo 실행 중인 컨테이너: $running_container
for image in $running_container
do
local_tag=$(echo $image | awk -F: '{print $2}')
if [ -z $local_tag ]; then
# 태그가 비어 있으면 가장 최근 버전으로 태그
local_tag=latest
image=$image:$local_tag
fi
local_digest=$(도커 inspect $image | jq '.[].RepoDigests[]' | awk -F@ '{print $2}' | tr -d '')
echo 로컬 다이제스트는: $local_digest
remote_digest=$(도커 run --rm --env image=$image alexeiled/skopeo:latest ash -c skopeo inspect docker://docker.io/$image | jq '.Digest' | tr -d '' )
echo $remote_digest
# 옵션2: 로컬 시스템에 skopeo 설치
# remote_digest=$(skopeo inspect docker://docker.io/$image | jq '.Digest' | tr -d '')
echo 원격 다이제스트는: $remote_digest
if [ ${local_digest} == ${remote_digest} ]; then
echo 로컬 이미지가 원격 이미지와 최신 상태입니다.
else
echo 원격 이미지가 업데이트되었습니다. $image을(를) 도커 풀 명령으로 실행해 주세요.
fi
done
답변 2
Docker 컨테이너에서 모든 이미지 태그를 찾는 방법에 대해 알아보겠습니다. Docker 컨테이너는 가상화된 환경에서 애플리케이션을 실행하기 위한 도구로써 많은 개발자와 시스템 운영자가 사용하고 있습니다. 컨테이너를 사용하면 애플리케이션을 더 쉽게 배포하고 관리할 수 있으며, 이를 통해 개발과 운영의 간극을 좁힐 수 있습니다.Docker 컨테이너에서 이미지 태그를 찾는 방법은 다음과 같습니다:
1. 먼저 도커 컨테이너를 실행하고 있는 컴퓨터 또는 서버의 터미널을 엽니다.
2. 실행 중인 Docker 컨테이너 목록을 확인하기 위해 docker ps 명령어를 입력합니다.
3. 컨테이너 ID 또는 이름을 확인하고 해당 컨테이너를 선택합니다.
4. docker inspect 명령어를 사용하여 컨테이너의 상세 정보를 확인합니다.
5. 이미지 정보는 Image 속성에 저장되어 있습니다. 이 속성의 값은 이미지의 태그와 함께 표시됩니다.
6. 해당 컨테이너의 이미지 태그를 추출하여 원하는 용도로 사용할 수 있습니다.
이와 같은 방법을 통해 Docker 컨테이너에서 실행 중인 모든 이미지 태그를 찾을 수 있습니다. Docker는 이미지의 버전 관리와 태그를 제공하기 때문에, 여러 버전의 이미지를 유지하고 필요에 따라 쉽게 전환할 수 있습니다.
Docker 컨테이너에서 모든 이미지 태그를 찾는 방법에 대해 알아보았습니다. Docker를 통해 애플리케이션을 운영하는 과정에서 이미지 관리는 매우 중요합니다. 적절한 이미지 태그를 사용하고 이를 관리함으로써 개발과 운영 팀 간의 협업 및 업데이트 과정을 원활하게 할 수 있습니다.
반응형
Comments