Hiện tại bạn không thể sử dụng API đăng ký cho tác vụ đó. Nó chỉ cho phép bạn xóa một kho lưu trữ hoặc một thẻ cụ thể.
Nói chung, xóa một kho lưu trữ có nghĩa là tất cả các thẻ liên quan đến repo này sẽ bị xóa.
Xóa thẻ có nghĩa là liên kết giữa hình ảnh và thẻ bị xóa.
Không ai ở trên sẽ xóa một hình ảnh duy nhất. Chúng được để lại trên đĩa của bạn.
Giải pháp thay thế
Đối với cách giải quyết này, bạn cần lưu trữ hình ảnh docker cục bộ.
Một cách giải quyết cho giải pháp của bạn là xóa tất cả trừ các thẻ mới nhất và do đó có khả năng xóa tham chiếu đến các hình ảnh liên quan. Sau đó, bạn có thể chạy tập lệnh này để xóa tất cả các hình ảnh, không được tham chiếu bởi bất kỳ thẻ hoặc tổ tiên của bất kỳ hình ảnh được sử dụng.
Thuật ngữ (hình ảnh và thẻ)
Hãy xem xét một đồ thị hình ảnh như thế này mà các chữ in hoa ( A
, B
, ...) đại diện cho ID hình ảnh ngắn và <-
phương tiện mà hình ảnh được dựa trên hình ảnh khác:
A <- B <- C <- D
Bây giờ chúng tôi thêm các thẻ vào hình ảnh:
A <- B <- C <- D
| |
| <version2>
<version1>
Ở đây, thẻ <version1>
tham chiếu hình ảnh C
và thẻ <version2>
tham chiếu hình ảnh D
.
Tinh chỉnh câu hỏi của bạn
Trong câu hỏi của bạn, bạn nói rằng bạn muốn loại bỏ
tất cả hình ảnh nhưng latest
. Bây giờ, thuật ngữ này không hoàn toàn chính xác. Bạn đã trộn lẫn hình ảnh và thẻ. Nhìn vào biểu đồ tôi nghĩ bạn sẽ đồng ý rằng thẻ <version2>
đại diện cho phiên bản mới nhất. Trong thực tế, theo câu hỏi này, bạn có thể có một thẻ đại diện cho phiên bản mới nhất:
A <- B <- C <- D
| |
| <version2>
| <latest>
<version1>
Vì <latest>
thẻ tham chiếu hình ảnh D
tôi hỏi bạn: bạn có thực sự muốn xóa tất cả trừ hình ảnh D
không? Chắc là không!
Điều gì xảy ra nếu bạn xóa một thẻ?
Nếu bạn xóa thẻ <version1>
bằng API Docker REST, bạn sẽ nhận được điều này:
A <- B <- C <- D
|
<version2>
<latest>
Hãy nhớ rằng: Docker sẽ không bao giờ xóa một hình ảnh! Ngay cả nếu có, trong trường hợp này, nó không thể xóa một hình ảnh, vì hình ảnh C
là một phần của tổ tiên cho hình ảnh D
được gắn thẻ.
Ngay cả khi bạn sử dụng tập lệnh này , sẽ không có hình ảnh nào bị xóa.
Khi một hình ảnh có thể bị xóa
Trong điều kiện bạn có thể kiểm soát khi ai đó có thể kéo hoặc đẩy vào sổ đăng ký của bạn (ví dụ: bằng cách vô hiệu hóa giao diện REST). Bạn có thể xóa một hình ảnh khỏi biểu đồ hình ảnh nếu không có hình ảnh nào khác dựa trên nó và không có thẻ nào đề cập đến nó.
Chú ý rằng trong đồ thị dưới đây, hình ảnh D
được không dựa trên C
nhưng trên B
. Do đó, D
không phụ thuộc vào C
. Nếu bạn xóa thẻ <version1>
trong biểu đồ này, hình ảnh C
sẽ không được sử dụng bởi bất kỳ hình ảnh nào và tập lệnh này có thể xóa nó.
A <- B <--------- D
\ |
\ <version2>
\ <latest>
\ <- C
|
<version1>
Sau khi dọn dẹp đồ thị hình ảnh của bạn trông như thế này:
A <- B <- D
|
<version2>
<latest>
Đây có phải là những gì bạn muốn?