Actualmente no puede usar la API de registro para esa tarea. Solo le permite eliminar un repositorio o una etiqueta específica.
En general, eliminar un repositorio significa que todas las etiquetas asociadas a este repositorio se eliminan.
Eliminar una etiqueta significa que se elimina la asociación entre una imagen y una etiqueta.
Ninguna de las anteriores eliminará una sola imagen. Se dejan en su disco.
Solución alterna
Para esta solución, debe tener sus imágenes acopladas almacenadas localmente.
Una solución alternativa para su solución sería eliminar todas las etiquetas menos las últimas y, por lo tanto, eliminar potencialmente la referencia a las imágenes asociadas. Luego puede ejecutar este script para eliminar todas las imágenes, a las que no hace referencia ninguna etiqueta o la ascendencia de cualquier imagen utilizada.
Terminología (imágenes y etiquetas)
Considere un gráfico de imagen como esta, donde las letras mayúsculas ( A
, B
, ...) representan identificadores de imagen cortos y <-
medios que una imagen se basa en otra imagen:
A <- B <- C <- D
Ahora agregamos etiquetas a la imagen:
A <- B <- C <- D
| |
| <version2>
<version1>
Aquí, la etiqueta hace <version1>
referencia a la imagen C
y la etiqueta hace <version2>
referencia a la imagen D
.
Refinando tu pregunta
En tu pregunta dijiste que querías eliminar
todas las imágenes menos la latest
. Ahora, esta terminología no es del todo correcta. Has mezclado imágenes y etiquetas. Mirando el gráfico, creo que estaría de acuerdo en que la etiqueta <version2>
representa la última versión. De hecho, de acuerdo con esta pregunta , puede tener una etiqueta que represente la última versión:
A <- B <- C <- D
| |
| <version2>
| <latest>
<version1>
Como la <latest>
etiqueta hace referencia a la imagen, D
le pregunto: ¿realmente desea eliminar todo menos la imagen D
? ¡Probablemente no!
¿Qué sucede si eliminas una etiqueta?
Si elimina la etiqueta <version1>
con la API REST de Docker, obtendrá esto:
A <- B <- C <- D
|
<version2>
<latest>
Recuerde: ¡ Docker nunca eliminará una imagen! Incluso si lo hizo, en este caso no puede eliminar una imagen, ya que la imagen C
es parte de la ascendencia de la imagen D
que está etiquetada.
Incluso si usa este script , no se eliminará ninguna imagen.
Cuando una imagen puede ser borrada
Bajo la condición de que pueda controlar cuándo alguien puede jalar o empujar a su registro (por ejemplo, deshabilitando la interfaz REST). Puede eliminar una imagen de un gráfico de imagen si ninguna otra imagen se basa en ella y ninguna etiqueta hace referencia a ella.
Tenga en cuenta que en el siguiente gráfico, la imagen D
se no basada en C
sino en B
. Por lo tanto, D
no depende de C
. Si elimina la etiqueta <version1>
en este gráfico, la imagen C
no será utilizada por ninguna imagen y este script puede eliminarla.
A <- B <--------- D
\ |
\ <version2>
\ <latest>
\ <- C
|
<version1>
Después de la limpieza, su gráfico de imagen se ve así:
A <- B <- D
|
<version2>
<latest>
¿Es esto lo que quieres?