Có bất kỳ thực hành tốt nhất và / hoặc công cụ để làm sạch hình ảnh Docker cũ một cách thường xuyên không?


13

Có cách nào tao nhã hay cách thực hành tốt nhất khi xóa hình ảnh cũ khỏi sổ đăng ký Docker không?

Tôi thấy rất nhiều yêu cầu / vấn đề ở đây: https://github.com/docker/docker-registry/labels/delete , nhưng không tìm thấy giải pháp tốt / phổ biến cho nó.

Vì vậy, có một công cụ hoặc một kỹ thuật sẽ giúp tôi làm điều đó?

Ngoài ra, có bất kỳ thực hành tốt nhất mà bạn làm theo trong khi thực hiện nó?


2
Bạn đang hỏi làm thế nào để làm sạch registry? (Đó là liên kết và câu hỏi bạn cung cấp), nhưng câu trả lời được chấp nhận không phải là làm sạch registry, mà là làm sạch docker cục bộ của bạn.
dinois

Câu trả lời:


10

Tôi đã có may mắn với Spotify / docker-gc . Nó có thể được chạy từ cron hoặc như một container docker.

Một container Docker đơn giản và tập lệnh thu gom rác hình ảnh.

  • Các container đã thoát hơn một giờ trước được gỡ bỏ.
  • Hình ảnh không thuộc về bất kỳ container nào còn lại sau đó sẽ bị xóa.

2
Thoạt nhìn, dường như, đằng sau tất cả những thứ bash, ít nhiều là một tập hợp con của một lớp lót từ câu trả lời của @rombob. Điều đó có đúng không, hay có một chút "thông minh" docker-gcnào mà tôi đang thiếu?
AnoE

1
Op liên kết và đặt câu hỏi về cách xóa sạch registry, nhưng docker-gc không xóa khỏi registry, nó chỉ xóa sạch khỏi máy cục bộ của bạn. Tôi đoán OP đã thực sự hỏi làm thế nào để dọn dẹp cục bộ
dinois

Trang của Docker-gc hiện khuyên nên sử dụng docker system prunethay thế. Nhưng tôi đã không tìm thấy cách loại trừ một số hình ảnh khỏi bị xóa bằng cách cắt xén của Docker. Có cách nào để loại trừ một số hình ảnh với docker system prune?
Alexander Artemenko

9

Không thể gọi đó là cách thực hành tốt nhất nhưng đây là những gì chúng tôi sử dụng được kích hoạt bởi cron, rất vui khi thấy các đề xuất tốt hơn.

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f

Vui lòng không xâu chuỗi grep và awk, thực hiện cùng một bộ lọc ngay trước lệnh awk `regex {lệnh}`
Tensibai

1
@Tensibai bất cứ điều gì để làm cho các pháp sư AWK hạnh phúc :)
rombob

Chỉ trong trường hợp, đó không chỉ là mô phạm, bạn tiết kiệm quá trình sinh sản và một loạt các thay đổi bối cảnh :) Nó không thay đổi nhiều ở đây, nhưng bất kỳ dịp nào để biện hộ cho điều đó là tốt :)
Tensibai

@Tensibai chắc chắn, những thói quen tốt sẽ được đền đáp bằng thời gian, sinh ra khiến chúng ta tốn thời gian và tiền bạc :)
rombob

Đặc biệt khi bạn phân tích / định dạng các tệp nhật ký hàng tỷ dòng để chuẩn bị cho đầu vào R :) Ở đây tôi không mong đợi nhiều hơn vài chục dòng.
Tensibai

4

Trên máy cục bộ (mac) của tôi, tôi có một đoạn script nhỏ, tôi thấy rằng tôi chạy định kỳ giúp dọn sạch tất cả các hình ảnh thừa lên sạch-docker-for-mac.sh

Đối với các máy chủ của tôi, tôi chạy melwater / docker-dọn dẹp , định kỳ dọn sạch các container đã thoát và loại bỏ các hình ảnh và khối lượng không được sử dụng.

Tôi sử dụng rất nhiều hình ảnh Docker khác nhau cho công việc của mình trên Codidiaon rằng các kịch bản như thế này là cần thiết đối với tôi. Thưởng thức!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.