Docker II: algunos tips más para ir perdiéndole el miedo a las imágenes y los contenedores.
Docker
1. Borrar containers en desuso
Para borrar algunos de los containers que no usamos mas necesitamos el id del container, pero esto es medio tedioso. O al menos yo me canso de copiar y pegar esos id, así que googleando uno encuentra ese comando mágico para borrar todos los que estan con estado "exited".
$ docker rm $(docker ps -a -q -f status=exited)
Para los que no solo quieren robarse el comando, les cuento que el paramentro -q
permite que solo se impriman los ids de los containers, por otro lado el paramentro -f
permite filtrar los resultados según la condición deseada, en este caso, los de estado exited.
Este commando igual es muy zarpado porque borra todos lo containers que estan con ese estado, que basicamente seria todos los que no están corriendo, así que yo tendría cuidado antes de ejecutarlo.
2. Borrado automático de containers
Lo úlitmo y quizás lo mas importante cuando corramos containers por única vez conviene siempre agregarle la flag --rm
con docker run para que se borre automaticamente el container después de su utilización.
$ docker run --rm -ti python:3.7
Python 3.7.0 (default, Jul 17 2018, 11:04:33)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hola mundo!")
hola mundo!
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3. Modo separado o desatachado
Si además de correr docker run, le agregamos la flag -d
esto hará que la ejecución de ese container no este unido, pegado, a nuestra terminal.
$ docker run -d -ti busybox sh
a12d531a9aaa504800436dfa0a18b2700a08d8dbc3335e887ed6a80ff3d52f67
Ahi corremos una imagen de busybox corriendo en un container separado de la terminal que lo inicializo. Y para que no se pierda nos devuelve un hash que nos va a permitir conectarnos a ese container. Para eso con el hash hacemos directamente docker attach:
$ docker attach a12d531a9aaa504800436dfa0a18b2700a08d8dbc3335e887ed6a80ff3d52f67
/ # ls
bin dev etc home proc root sys tmp usr var
/ #
Un script que utilizo a menudo para liberar espacio usado por docker es:
#!/bin/bash
# remove exited containers:
docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v
# remove unused images:
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi
# remove unused volumes:
docker volume ls -qf dangling=true | xargs -r docker volume rm
Para que funcione en Osx / Mac en vez de usar xargs paso todo con $() ejemplo:
# OSX
# remove exited containers:
docker rm -v $(docker ps --filter status=dead --filter status=exited -aq)
# remove unused images:
docker rmi $(docker images --no-trunc | grep '<none>' | awk '{ print $3 }')
# remove unused volumes:
docker volume rm $(docker volume ls -qf dangling=true)
Para seguir leyendo: Docker: una pequeña introducción y algunos comandos útiles para tener a mano.