2. Docker

2.4. Eliminar imágenes y contenedores Docker

Siempre es recomendable mantener una buena gestión de imágenes y contenedores, ya que van ocupando espacio innecesariamente si no se utilizan. Así aprenderemos a eliminar imágenes y contenedores.

Para poder eliminar imágenes, necesitaremos saber la Image ID. Para ello utilizaremos el siguiente comando:

$ docker image ls

Nos aparecerá un output similar al siguiente:

Tabla 1.

REPOSITORY        TAG IMAGE ID      CREATED        SIZE
alpine latest 9ed4aefc74f6 10 days ago 7.05MB
hello-world latest feb5d9fea6a5 18 months ago 13.3kB

Fuente: elaboración propia.

Así para eliminar una imagen simplemente se debe especificar el Image ID tal que así:

$ docker image rm feb5d9fea6a5

O utilizando su nombre:

$ docker image rm hello-world

Muchas veces nos podemos encontrar con un mensaje de error:

Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) – image is being used by stopped container 06dda9650983

Esto nos está indicando que hay un contenedor que aún está activo o que aún no ha sido limpiado que está o ha utilizado esta imagen. Para ello primero debemos eliminar los contenedores que están impidiendo la eliminación de esta imagen.

Primero listamos los contenedores activos:

$ docker container ls

O, de manera similar, podemos utilizar:

$ docker ps

Es posible que no nos devuelva ningún contenedor activo. En realidad, el mensaje de error previo nos indicaba que el contenedor había parado; por lo tanto, tiene sentido no encontrar el contenedor en este listado. Así necesitaremos ver los contenedores tanto activos como los que recientemente se han parado:

$ docker container ls –all

Aquí sí que podemos ver el contenedor anteriormente especificado como enlazado a «hello-world»:

Tabla 2.

CONTAINER ID   IMAGE                  COMMAND                  CREATED  STATUS PORTS  NAMES
8a149fe84874 alpine «sh» About an hour ago Exited xenodochial_thompson
06dda9650983 hello-world «/hello» 12 hours ago Exited upbeat_satoshi

Fuente: elaboración propia.

Para evitar que se vayan acumulando los contenedores se puede añadir al comando run una opción de eliminar automáticamente una vez finalizado:

$ docker container run --rm hello-world

Si no hemos especificado la opción rm, debemos eliminarlo manualmente utilizando como referencia el Container ID:

$ docker container rm 06dda9650983

Si se elimina correctamente nos devolverá el Container ID en el terminal. Se puede borrar más de un Container ID simultáneamente.

Si tienes varios contenedores asociados a una imagen y quieres borrarlos todos utilizando un patrón puedes:

$ docker container ps -a | grep "world" | awk '{print $1}' | xargs docker rm

En este caso utilizamos el comando xargs para controlar una lista de argumentos para poder ser eliminados mediante rm de Docker.

Ahora veréis que al listar los contenedores ya no aparece el contenedor, y si probamos de eliminar la imagen como previamente habíamos intentado lo hará sin problemas.

$ docker image rm hello-world
$ docker image ls

Si se quiere eliminar todos los contenedores existentes podemos utilizar:

$ docker container prune

De esta manera todos los contenedores existentes serán eliminados y si queremos volver a reconectarlos deberemos iniciarlos de nuevo.