Docker II: algunos tips más para ir perdiéndole el miedo a las imágenes y los contenedores.

16/08/2018 | Autor: Eduardo Enriquez

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.