Attualmente non è possibile utilizzare l'API del registro per tale attività. Ti consente solo di eliminare un repository o un tag specifico.
In generale, l'eliminazione di un repository significa che tutti i tag associati a questo repository vengono eliminati.
L'eliminazione di un tag significa che viene eliminata l'associazione tra un'immagine e un tag.
Nessuna delle precedenti eliminerà una singola immagine. Sono lasciati sul tuo disco.
Soluzione
Per questa soluzione alternativa è necessario che le immagini della finestra mobile siano memorizzate localmente.
Una soluzione alternativa per la soluzione sarebbe quella di eliminare tutti i tag tranne gli ultimi e quindi rimuovere potenzialmente il riferimento alle immagini associate. Quindi è possibile eseguire questo script per rimuovere tutte le immagini, a cui non fa riferimento alcun tag o la provenienza di alcuna immagine utilizzata.
Terminologia (immagini e tag)
Si consideri un grafico di immagini come questo, dove le lettere maiuscole ( A
, B
, ...) rappresentano gli ID immagine brevi e <-
mezzi che un'immagine si basa su un'altra immagine:
A <- B <- C <- D
Ora aggiungiamo tag all'immagine:
A <- B <- C <- D
| |
| <version2>
<version1>
Qui, il tag fa <version1>
riferimento all'immagine C
e il tag fa <version2>
riferimento all'immagine D
.
Affina la tua domanda
Nella tua domanda hai detto che volevi rimuovere
tutte le immagini tranne il latest
. Ora, questa terminologia non è del tutto corretta. Hai mescolato immagini e tag. Guardando il grafico, penso che saresti d'accordo sul fatto che il tag <version2>
rappresenti l'ultima versione. In effetti, secondo questa domanda puoi avere un tag che rappresenta l'ultima versione:
A <- B <- C <- D
| |
| <version2>
| <latest>
<version1>
Dal momento che il <latest>
tag fa riferimento all'immagine che D
ti chiedo: vuoi veramente eliminare tutto tranne l'immagine D
? Probabilmente no!
Cosa succede se elimini un tag?
Se elimini il tag <version1>
utilizzando l'API REST Docker otterrai questo:
A <- B <- C <- D
|
<version2>
<latest>
Ricorda: Docker non cancellerà mai un'immagine! Anche se lo facesse, in questo caso non può cancellare un'immagine, poiché l'immagine C
fa parte degli antenati per l'immagine D
che è taggata.
Anche se usi questo script , nessuna immagine verrà eliminata.
Quando un'immagine può essere cancellata
A condizione che tu possa controllare quando qualcuno può estrarre o spingere nel tuo registro (es. Disabilitando l'interfaccia REST). È possibile eliminare un'immagine da un grafico immagine se nessun'altra immagine è basata su di essa e nessun tag fa riferimento ad essa.
Si noti che nel grafico seguente, l'immagine D
è non basata su C
ma su B
. Pertanto, D
non dipende da C
. Se elimini il tag <version1>
in questo grafico, l'immagine C
non verrà utilizzata da nessuna immagine e questo script può rimuoverla.
A <- B <--------- D
\ |
\ <version2>
\ <latest>
\ <- C
|
<version1>
Dopo la pulizia, il grafico dell'immagine appare così:
A <- B <- D
|
<version2>
<latest>
È questo che vuoi?