Saltar al contenido

¿Cómo eliminar imágenes de un registro de Docker privado?

Solución:

Actualmente, no puede utilizar 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 se eliminan todas las etiquetas asociadas a este repositorio.

Eliminar una etiqueta significa que se elimina la asociación entre una imagen y una etiqueta.

Ninguno de los anteriores eliminará una sola imagen. Se dejan en su disco.


Solución alterna

Para esta solución, debe tener las imágenes de la ventana acoplable almacenadas localmente.

Una solución alternativa para su solución sería eliminar todas las etiquetas excepto las más recientes y, por lo tanto, eliminar potencialmente la referencia a las imágenes asociadas. Entonces puedes correr este guión para eliminar todas las imágenes, que no están referenciadas por ninguna etiqueta o la ascendencia de ninguna imagen utilizada.

Terminología (imágenes y etiquetas)

Considere un gráfico de imagen como este donde las letras mayúsculas (A, B, …) representan ID de imagen cortos y <- significa 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 <version1> hace referencia a la imagen C y la etiqueta <version2> hace referencia a la imagen D.

Refinando tu pregunta

En tu pregunta dijiste que querías eliminar

todas las imágenes menos la latest

. Ahora bien, esta terminología no es del todo correcta. Has mezclado imágenes y etiquetas. Al mirar 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>

Desde el <latest> imagen de referencias de etiqueta D Te pregunto: ¿de verdad quieres borrar todo menos la imagen? D? ¡Probablemente no!

¿Qué pasa si borras una etiqueta?

Si borra la etiqueta <version1> usando la API REST de Docker obtendrá esto:

 A <- B <- C <- D
                |
                <version2>
                <latest>

Recordar: ¡Docker nunca eliminará una imagen! Incluso si lo hiciera, en este caso no puede eliminar una imagen, ya que la imagen C es parte de la ascendencia de la imagen D que está etiquetado.

Incluso si usa este guión, no se eliminará ninguna imagen.

Cuando se puede borrar una imagen

Con la condición de que pueda controlar cuándo alguien puede acceder a su registro (por ejemplo, desactivando 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.

Observe que en el siguiente gráfico, la imagen D es no Residencia en C pero en B. Por lo tanto, D no depende de C. Si elimina la etiqueta <version1> en este gráfico, la imagen C no será utilizado por ninguna imagen y este guión puede eliminarlo.

 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?

Enfrenté el mismo problema con mi registro y luego probé la solución que se enumera a continuación desde una página de blog. Funciona.

Paso 1: Listado de catálogos

Puede enumerar sus catálogos llamando a esta URL:

http://YourPrivateRegistyIP:5000/v2/_catalog

La respuesta tendrá el siguiente formato:

{
  "repositories": [
    <name>,
    ...
  ]
}

Paso 2: enumerar las etiquetas para el catálogo relacionado

Puede enumerar las etiquetas de su catálogo llamando a esta URL:

http://YourPrivateRegistyIP:5000/v2/<name>/tags/list

La respuesta tendrá el siguiente formato:

{
"name": <name>,
"tags": [
    <tag>,
    ...
]

}

Paso 3: enumere el valor del manifiesto para la etiqueta relacionada

Puede ejecutar este comando en el contenedor de registro de Docker:

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost:5000/v2/<name>/manifests/<tag> 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'

La respuesta tendrá el siguiente formato:

sha256:6de813fb93debd551ea6781e90b02f1f93efab9d882a6cd06bbd96a07188b073

Ejecute el comando que se indica a continuación con el valor de manifiesto:

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE http://127.0.0.1:5000/v2/<name>/manifests/sha256:6de813fb93debd551ea6781e90b02f1f93efab9d882a6cd06bbd96a07188b073

Paso 4: eliminar manifiestos marcados

Ejecute este comando en su contenedor de registro de Docker:

bin/registry garbage-collect  /etc/docker/registry/config.yml  

Aquí está mi config.yml

[email protected]:/etc# cat /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
  service: registry
storage:
    cache:
        blobdescriptor: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
    delete:
        enabled: true
http:
    addr: :5000
    headers:
        X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

La corriente v2 el registro ahora admite la eliminación a través de DELETE /v2/<name>/manifests/<reference>

Ver: https://github.com/docker/distribution/blob/master/docs/spec/api.md#deleting-an-image

Uso de trabajo: https://github.com/byrnedo/docker-reg-tool

Editar: el manifiesto <reference> se puede recuperar solicitando a

GET /v2/<name>/manifests/<tag>

y comprobando el Docker-Content-Digest encabezado en la respuesta.

Edición 2: es posible que deba ejecutar su registro con el siguiente conjunto de entorno:

REGISTRY_STORAGE_DELETE_ENABLED="true"

Edit3: es posible que deba ejecutar la recolección de basura para liberar este espacio en el disco: https://docs.docker.com/registry/garbage-collection/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *