2.4. Eliminar imatges i contenidors Docker
Sempre és recomanable mantenir una bona gestió d’imatges i contenidors, ja que, si no s’utilitzen, van ocupant espai de manera innecessària. Així, aprendrem a eliminar imatges i contenidors.
Per poder eliminar imatges, necessitarem saber la Image ID. Per a això, utilitzarem la següent ordre:
$ docker image ls
Ens apareixerà un output similar al següent:
Taula 1.
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
alpine | latest | 9ed4aefc74f6 | 10 days ago | 7.05MB |
hello-world | latest | feb5d9fea6a5 | 18 months ago | 13.3kB |
Així, per eliminar una imatge simplement s’ha d’especificar la Image ID:
$ docker image rm feb5d9fea6a5
O emprant el seu nom:
$ docker image rm hello-world
Moltes vegades ens podem trobar amb un missatge d’error:
Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) – image is being used by stopped container 06dda9650983
Això ens està indicant que hi ha un contenidor que encara està actiu, que encara no ha estat netejat o que està o ha fet ús d’aquesta imatge. Per això, primer hem d’eliminar els contenidors que estan impedint l’eliminació d’aquesta imatge.
Primer llistem els contenidors actius:
$ docker container ls
O, de manera similar, podem utilitzar:
$ docker ps
És possible que no ens retorni cap contenidor actiu. En realitat, el missatge d’error previ ens indicava que el contenidor s’havia aturat; per tant, té sentit que no trobem el contenidor en aquest llistat. Així, necessitarem veure tant els contenidors actius com els que recentment s’han aturat:
$ docker container ls –all
Aquí sí que podem veure el contenidor anteriorment especificat com a enllaçat a «hello-world»:
Taula 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 |
Per evitar que es vagin acumulant els contenidors, es pot afegir a l’ordre run
una opció d’eliminar automàticament un cop finalitzat:
$ docker container run --rm hello-world
Si no hem especificat l’opció rm
, l’hem d’eliminar manualment utilitzant com a referència el Container ID:
$ docker container rm 06dda9650983
Si s’elimina correctament, ens retornarà el Container ID al terminal. Es pot esborrar més d’un Container ID simultàniament.
Si tenim diversos contenidors associats a una imatge i volem esborrar-los tots utilitzant un patró podem:
$ docker container ps -a | grep "world" | awk '{print $1}' | xargs docker rm
En aquest cas, utilitzem l’ordre xargs
per controlar una llista d’arguments per poder ser eliminats mitjançant rm
de Docker.
Ara veurem que, quan llistem els contenidors, ja no apareix el contenidor i, si provem d’eliminar la imatge com prèviament havíem intentat, ho farà sense problemes.
$ docker image rm hello-world
$ docker image ls
Si es volen eliminar tots els contenidors existents, podem utilitzar:
$ docker container prune
D’aquesta manera tots els contenidors existents seran eliminats i, si volem tornar a reconnectar-los, haurem d’iniciar-los de nou.