programing

도커 이미지 필터 사용 방법

yellowcard 2023. 10. 7. 09:47
반응형

도커 이미지 필터 사용 방법

쓸 수 있습니다.

docker images --filter "dangling=true"

그 밖에 어떤 필터를 사용할 수 있습니까?

이런 거 써도 돼요?

docker images --filter "running=false"

도커 v1.13.0은 다음 조건을 지원합니다.

  -f, --filter value    Filter output based on conditions provided (default [])
                        - dangling=(true|false)
                        - label=<key> or label=<key>=<value>
                        - before=(<image-name>[:tag]|<image-id>|<image@digest>)
                        - since=(<image-name>[:tag]|<image-id>|<image@digest>)
                        - reference=(pattern of an image reference)

아니면 사용grep일부 값으로 영상을 필터링하려면:

$ docker images | grep somevalue

참고문헌

도 할 수 .REPOSITORY 논쟁docker images이미지를 필터링합니다.

예를 들어, 다음과 같은 이미지가 있다고 가정합니다.

$ docker images
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
local-foo            latest       17864104b328     2 months ago    100 MB
example.com/bar      latest       b94c37de2801     9 months ago    285 MB
example.com/baz      latest       a004e3ac682c     2 years ago     221 MB

지정된 이름을 가진 모든 이미지에 대해 명시적으로 필터링할 수 있습니다.

$ docker images example.com/bar
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB

도커는 또한 다음을 지원합니다.

$ docker images "example.com/*"
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB
example.com/baz      latest       a004e3ac682c     2 years ago     221 MB

여기 공식 문서입니다.

도커 v1.7의 경우:

현재 지원되는 필터는 다음과 같습니다.

  • - ( -true아니면false)
  • label=<key>아니면label=<key>=<value>)

나를 위해.

docker images -q | while read IMAGE_ID; do
    docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done

속임수를 썼습니다.date 명령은 다음을 통해 동일한 형식으로 출력을 생성할 수 있습니다.

date -Ins --date='10 weeks ago'

타임스탬프를 비교할 수 있습니다.그래도 이미지를 걸기 위해 필터를 사용하는 편입니다.

원격 레포(my-repo.example.com )로 태그가 지정된 로컬 이미지와 이미지 모두 일치하는 이미지를 찾고 싶습니다.

예를들면,

docker images
REPOSITORY                                       TAG       IMAGE ID       CREATED        SIZE
my-good-app                                    latest    9a8742ad82d3   24 hours ago   126MB
my-repo.example.com/mine/my-good-app           latest    9a8742ad82d3   24 hours ago   126MB
my-repo.example.com/mine/demo-docker           latest    c10baf5231a1   2 weeks ago    200MB

필터링이 어떻게 작동하는지 알아내는 것에 지쳤고, 그래서 나는 내가 아는 것으로 되돌아갔습니다.

docker images | grep my-good-app  | awk '{print $3}' | uniq

이 합니다인 합니다.my-good-app를 모두 수 와 ()와 같은 이름이 있는 ).my-repo.example.com예를 들어).

그런 다음 위에 일치하는 이미지를 삭제하려면 다음을 실행했습니다.

docker rmi -f $(docker images | grep my-good-app  | awk '{print $3}' | uniq)

생성 날짜와 저장소/태그를 모두 기준으로 이미지를 제거하는 솔루션을 찾고 있는 경우 Docker CLI에 적절한 필터링이 없습니다.

  1. docker image prune합니다를 합니다.--since그리고.--until그예:--until=24h 수 .) repo/tag 를 합니다.
  2. docker images그리고.docker image ls repo/tag터)를 허용합니다예:--filter=reference='registry.gitlab.com/group/*/*에 만 ID 됩니다를 허용합니다.--since그리고.--before(예를 들면--since=586026f10754)

저는 일반적으로 필요하다고 생각하는 이미지를 레포와 생성 날짜 모두를 기준으로 이미지를 제거하는 (7행) 원라인을 작성했습니다.여기 있습니다.

docker image rm $(docker images \
--filter=reference='registry.gitlab.com/group/*/*/*:*' \
--format "{{.ID}}-{{.CreatedAt}}'" | \
cut -d " " -f 1 | \
sed 's/-/ /'| \
awk -v date="$(date --date='3 days ago' +%Y-%m-%d)" '$NF < date' \
cut -d " " -f 1)

사용자 지정:

사항: :bash,awk,cut,sed그리고 y.docker.

sudo 도커 이미지 --필터 "running= false"

는 를 할 수 있습니다.
docker container prune

태그가 지정되지 않은 이미지를 제거하려면 다음을 사용할 수 있습니다.
docker image prune

파워셸에서는 다음 예를 사용합니다.

docker images --format "{{.Repository}}:{{.Tag}}" | findstr "some_name"

영상을 삭제하려면 다음과 같이 delete 명령과 결합할 수 있습니다.

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "some_name")

이미지 필터를 사용하는 방법에 대한 원래 답변에 유사한 시나리오에 대한 사용 사례를 추가합니다.

내 CI 파이프라인은 도커를 재구축하고 매번 마지막 커밋 번호로 태그를 지정하여 도커 저장소로 보냅니다.

그러나 이로 인해 CI 빌드 기계에 잔여 이미지와 사용되지 않거나 원하지 않는 이미지가 표시됩니다.포스트 단계로 지금 빌드한 이미지라도 모두 정리해야 하지만 동시에 기본 다운로드한 이미지(예: OpenJDK, PostGre)를 삭제하지 않고 남겨두어 매번 다운로드하지 않도록 해야 합니다.

  1. 도커 파일에 레이블을 추가합니다(유일하며 내 기본 이미지에 포함되지 않을 것으로 예상됨).

LABEL built=XYZ

  1. 이미지 필터를 사용하여 내가 만든 이미지에 대한 이미지 식별자를 가져옵니다.

docker images --quiet --filter label=built=XYZ

  1. 빌드 후 작업으로 삭제

docker rmi -f $(docker images --quiet --filter label=built=XYZ)

버전 17.09++에서 작동하는 또 다른 예가 있습니다.

sudo docker rmi $(sudo docker images -f=reference="registry.gitlab.com/example-app" -f "dangling=true" -q)

설명:

  • reference- 저장소 이름으로 이미지를 참조하고 있습니다.
  • dangling=true- 태그가 지정되지 않은 이미지를 제거하고 있습니다.
  • -q- 는 전체 라인이 아닌 이미지의 숫자 ID만 표시하는 조용한 것을 의미합니다.

이 명령은 저장소 이름이 "registry.gitlab.com/example-app "이고 태그가 지정되지 않은 모든 이미지를 제거합니다.<none>태그 열에)

참조 링크 : https://docs.docker.com/engine/reference/commandline/images/ #

도커 내장 필터링 기능은 특정한 사용 사례에 맞게 잘라내지 않습니다.일반적으로 순방향 슬래시와 일치하지 않는 글로벌 패턴은 동일한 순방향 슬래시 개수를 공유하지 않는 이미지와 일치시킬 수 없습니다.

저는 awk와 같은 외부 도구에 의존하는 것이 더 쉽다고 생각합니다.예를 들어, 특정 저장소와 모든 스냅샷 버전으로 태그가 지정된 하위 디렉터리에서 모든 이미지를 꺼내거나 업데이트합니다.

docker images --filter=since=65f20cac3aa5 | awk '$1~repo && $2~tag { print $1 ":" $2}' repo=my.repo.com/subdirectory tag=SNAPSHOT | xargs -r -L 1 docker pull

"since"에 내장된 필터와 결합했다는 것을 주목하십시오.

FYI, 필터는 없지만 테스트나 학습으로 사용할 때 모든 이미지를 삭제하기 위해,

도커 이미지 rm -f $(dock 이미지)

인사말.

언급URL : https://stackoverflow.com/questions/24659300/how-to-use-docker-images-filter

반응형