태그와 이름이 있는 도커 이미지 찾기

태그와 이름이 있는 도커 이미지 찾기

도커 이미지를 실행할 때 docker images여러 태그가 있는 이미지와 최신 태그 값이 있는 이미지가 있는 목록이 아래에 있습니다.

REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
m1                                  latest              40febdb010b1        15 minutes ago      479MB
m2                                    130                 fab5a122127a        4 weeks ago         2.74GB
m2                                    115                 5a2ee5c5f5e5        4 weeks ago         818MB
m3                                    111                 dd91a7f68e3d        5 weeks ago         818MB
m3                                     23                  0657662756f6        5 weeks ago         2.22GB
m4                                     23                  0657662756f6        5 weeks ago         2.22GB

그렇게 하는 동안 for i in {docker image save -o <imagename>.tar}숫자가 더 높은 태그에 대해 이미지를 tar로 저장하고 싶지만 latest태그 및 도커 이미지 이름이 있는 도커 이미지는 제외하고 m4 하나의 라이너 명령으로 이를 달성하는 방법을 설명합니다.

답변1

Bash를 가정하면 다음과 같은 작업을 수행하는 "한 줄짜리"가 있습니다.

unset saved; declare -A saved; docker images --format '{{.Repository}} {{.Tag}}' | while read repo tag; do if [[ "$repo" == "m4" ]] || [[ "$tag" == latest ]]; then continue; fi; if [[ "${saved[$repo]}" != true ]]; then docker image save -o "$repo-$tag".tar "$repo:$tag"; saved["$repo"]=true; fi; done

이해할 수 있도록 분할하십시오.

unset saved
declare -A saved
docker images --format '{{.Repository}} {{.Tag}}' | while read repo tag; do
  if [[ "$repo" == "m4" ]] || [[ "$tag" == latest ]]; then continue; fi
  if [[ "${saved[$repo]}" != true ]]; then
    docker image save -o "$repo-$tag".tar "$repo:$tag"
    saved["$repo"]=true
  fi
done

이는 연관 배열을 선언하고 saved, 저장소와 태그만 포함하여 이미지를 나열하고, latest이미지를 건너뛰고, 아직 저장소를 저장하지 않은 경우 이미지를 저장합니다. 후자를 결정하기 위해 이미지가 저장될 때 해당 사실이 배열에 기록됩니다 saved. 이미지를 저장하기 전에 동일한 저장소를 가진 이미지가 이미 저장되었는지 확인하기 위해 배열을 검사합니다.

docker images가장 최근 이미지부터 나열하므로 동일한 저장소(또는 이름)를 공유하는 이미지가 여러 개 있을 때마다 가장 최근 이미지가 저장됩니다.

tarball 이름에는 특별한 처리가 없으므로 슬래시가 포함된 저장소에서는 원하는 작업을 수행하지 못할 수도 있습니다. 저장소나 태그가 없는 이미지도 처리되지 않습니다. 다음의 더 긴 버전은 적절하게 하위 디렉터리를 생성하고 레이블이 없는 이미지를 건너뜁니다.

unset saved
declare -A saved
docker images --format '{{.Repository}} {{.Tag}}' | while read repo tag; do
  if [[ "$repo" == "m4" ]] || [[ "$tag" == latest ]] || [[ "$repo" == "<none>" ]] || [[ "$tag" == "<none>" ]]; then continue; fi
  if [[ "${saved[$repo]}" != true ]]; then
    if [[ "${repo}" =~ "/" ]]; then mkdir -p "${repo%/*}"; fi
    docker image save -o "$repo-$tag".tar "$repo:$tag"
    saved["$repo"]=true
  fi
done

관련 정보