En esta entrada te voy a mostrar 7 de mis comandos Docker favoritos. No es un tutorial en toda norma, solo ten esta entrada en tus marcadores para que sea tu ángel de la guarda.
1- Saber cuántos recursos está consumiendo cada contenedor:
Dentro de los comandos docker más útiles que verás hoy tienes este que te muestra los recursos consumidos por tus contenedores, esto es genial para tener idea de cuánto presupuesto necesitas para desplegar tu aplicación en algún servicio de cloud.
docker stats
docker ps -f id=34b0df6e0f94
Recuerda reemplazar 34b0df6e0f94
por el id
del contenedor que estás evaluando.
2- Limpiar el sistema
docker system prune
Este comando elimina todos los volumenes, imagenes, contenedores y networks que ya no se estén utilizando.
Antes de ejecutarlo te recomiendo ejecutar:
docker ps -a
docker volume ls
docker network ls
Y revises que no te vayas a cargar nada de lo que te puedas lamentar ya que este comando borra y no tiene CRTL + Z que te salve de una cagada.
3- Saber toda la info de un contenedor
docker inspect <container_id>
Este comando te va escupir por consola tanta mierda que te será un poco difícil de leer todo aquello, ya que es muy específico con esto de «toda la información» y muestra volúmenes, IPs, Networks, etc.
Para que no te marees entre tanto output
te recomiendo parsear todo esto como un JSON
utilizando jq
y que puedas mirar todo mejor en detalle.
Si quieres parsear alguna key en particular puedes usar jq que es el parser de JSON por defecto de linux
docker inspect <container_id> | jq '.[].<dict_key>'
Ejemplos:
- Mostrar información de la Network
docker inspect <container_id> | jq '.[].NetworkSettings'
- Mostrar información de los volúmenes
docker inspect <container_id> | jq '.[].Mounts'
- Para usar una subkey usamos el punto para concatenar
docker inspect 34b0df6e0f94 | jq '.[].State.Status'
docker inspect 34b0df6e0f94 | jq '.[].NetworkSettings.Networks'
4- Agregar un archivo desde internet a la imagen del contenedor sin tener wget instalado:
ADD example.com/tmp /tmp/
Este comando te hace prescindir de la instalación de wget
en tus contenedores, con lo que te ahorras el update
también, de nada.
5- Intentar reiniciar un contenedor solo un número de veces predeterminado:
restart: on-failure:<times_to_try>
Ejemplo:
restar: on-failure:10
Esto funciona mejor que restart: always
ya que se detiene en caso de que algo esté fallando.
6- Ver la hora a la que ocurrieron las incidencias de los logs:
docker logs --tail=10 -t <container_id>
Si quieres ver más líneas sólo necesitas aumentar el tail
y ya está.
7- Borrar todos los contenedores de una imagen
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
Me voy a detener a explicar un poco más este comando y su utilidad:
Cuando estamos desarrollando hay momentos en los que es necesario ir creando contenedores mientras haces purebas, con la consecuencia de que luego se quedan ahí un MONTÓN de contenedores en estado "exited"
.
¿Que se puede evitar con un --rm
en la ejecución del contenedor?
Sí, pero no en todos los casos aplica.
¿Que se puede evitar borrando el contenedor fallido antes de iniciar otro?
También, pero es un coñazo eso.
Ahí es donde entra este comando con el que puedes ir creando contenedores como loco ya que sabes que al final de las pruebas puedes borrar toda la basura con un solo comando sin usar el peligroso docker system prune
.