도커 이미지 필터 사용 방법
쓸 수 있습니다.
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에 적절한 필터링이 없습니다.
docker image prune
합니다를 합니다.--since
그리고.--until
그예:--until=24h
수 .) repo/tag 를 합니다.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)를 삭제하지 않고 남겨두어 매번 다운로드하지 않도록 해야 합니다.
- 도커 파일에 레이블을 추가합니다(유일하며 내 기본 이미지에 포함되지 않을 것으로 예상됨).
LABEL built=XYZ
- 이미지 필터를 사용하여 내가 만든 이미지에 대한 이미지 식별자를 가져옵니다.
docker images --quiet --filter label=built=XYZ
- 빌드 후 작업으로 삭제
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
'programing' 카테고리의 다른 글
XML에서 문자열 이름에 공백 문자를 넣는 방법은? (0) | 2023.10.07 |
---|---|
Element ID에 포커스가 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.10.07 |
MIPS 어셈블리 언어의 "move"와 "li"의 차이 (0) | 2023.10.07 |
mysql 클라이언트에서 vikey 바인딩을 작동시키는 방법은 무엇입니까? (0) | 2023.10.07 |
부울로 요소 숨기기/표시 (0) | 2023.10.07 |