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 |
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 |
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.