7 comandos Docker nivel Ninja

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

NOTA: esto no te dice el nombre del contenedor, para ver el nombre debes usar docker ps y filtrar por el id por ejemplo:

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.

Soy Snell Rojas | Consultor SEO

Soy un experimentado Consultor SEO con 5 años de experiencia trabajando con equipos de marketing y desarrollando estrategias SEO para más de 100 sitios web. Mis principales habilidades son diseñar e implementar cambios en la estrategia de SEO que pueden mejorar los objetivos deseados, mejorar aspectos técnicos de SEO (ya que tengo 3 años de experiencia como desarrollador back-end), también me siento muy bien trabajando de la mano con mis clientes para optimizar sus páginas web.