Una vez que tus contenedores están en marcha, el trabajo no ha terminado. Es crucial saber cómo monitorear su rendimiento, revisar sus logs y mantener el sistema limpio y ordenado. Docker proporciona varias herramientas para estas tareas de administración.
Este comando proporciona una vista en vivo del consumo de recursos de tus contenedores en ejecución. Es como el "Administrador de Tareas" de Windows o el `top` de Linux, pero para contenedores.
docker stats
La salida se actualiza continuamente y muestra para cada contenedor:
Es extremadamente útil para identificar rápidamente si un contenedor está consumiendo demasiados recursos.
Casi todas las aplicaciones escriben logs en la salida estándar (stdout) y en el error estándar (stderr). Docker captura estas salidas y te permite verlas con el comando `docker logs`.
# Ver todos los logs de un contenedor
docker logs mi-contenedor
# Seguir los logs en tiempo real (como tail -f)
docker logs -f mi-contenedor
# Mostrar solo las últimas 50 líneas
docker logs --tail 50 mi-contenedor
Este es el primer lugar donde debes mirar cuando un contenedor no se comporta como esperas.
Si necesitas ver los procesos que se están ejecutando *dentro* de un contenedor específico, puedes usar `docker top`.
docker top mi-contenedor
Esto es útil para depurar y entender qué está haciendo exactamente tu aplicación dentro de su entorno aislado.
Ya vimos `docker inspect` para imágenes, pero es igualmente útil para contenedores, volúmenes y redes. Proporciona una gran cantidad de información detallada en formato JSON.
docker inspect mi-contenedor
Puedes usarlo para encontrar información específica, como la dirección IP de un contenedor en una red:
# Filtra la salida JSON para obtener solo la dirección IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mi-contenedor
Con el tiempo, Docker puede acumular muchos recursos no utilizados: contenedores detenidos, imágenes antiguas, redes sin usar y volúmenes huérfanos. Esto puede ocupar una cantidad significativa de espacio en disco.
El comando `docker system prune` es una herramienta poderosa para limpiar todo esto de una sola vez.
docker system prune
Por defecto, este comando elimina:
¡Cuidado! Por defecto, `prune` no elimina volúmenes no utilizados para evitar la pérdida accidental de datos. Para incluir los volúmenes, debes usar el flag `--volumes`:
docker system prune --volumes
Para una limpieza aún más agresiva, puedes usar el flag `-a`, que elimina todas las imágenes que no estén asociadas a ningún contenedor en ejecución:
docker system prune -a
Normalmente, compartimos imágenes a través de un registro como Docker Hub. Sin embargo, a veces necesitas transferir una imagen a un sistema sin acceso a internet o simplemente guardarla como un archivo de respaldo.
Este comando empaqueta una imagen (con todas sus capas) en un archivo tar.
docker save -o mi-app-flask.tar mi-app-flask:1.0
Ahora tienes un archivo `mi-app-flask.tar` que puedes copiar a otra máquina.
En la máquina de destino, puedes cargar la imagen en Docker usando `docker load`.
docker load -i mi-app-flask.tar
Después de ejecutar este comando, la imagen `mi-app-flask:1.0` estará disponible localmente, como si la hubieras descargado con `docker pull`.