Cómo liberar espacio en servidor Docker | Limpieza y mantenimiento de Docker

Docker | Mantenimiento | Limpieza | Disco

Liberar espacio en disco en un servidor Docker

Docker consume espacio sin control: imágenes antiguas, contenedores detenidos, volúmenes olvidados y logs gigantes. Aprende a limpiar correctamente sin romper nada.

El problema silencioso de Docker


Docker es una herramienta imprescindible en muchos entornos, pero con el tiempo puede convertirse en un problema silencioso: el consumo de disco crece sin control.

Si alguna vez has revisado /var/lib/docker y te has encontrado decenas de GB ocupados, no estás solo. Esto suele deberse a:

  • Imágenes antiguas que nunca eliminas
  • Contenedores detenidos que siguen ocupando espacio
  • Volúmenes olvidados sin datos útiles
  • Logs que nunca se rotan y crecen sin límite
  • Caché de builds acumulado

En esta guía veremos cómo identificar qué está ocupando espacio y cómo limpiarlo correctamente, sin romper nada en el proceso.

Paso 1: Analiza el uso de espacio en Docker

Antes de borrar nada, es importante entender qué está consumiendo disco. Para ello ejecuta este comando que te detallará exactamente qué está ocupando espacio:

docker system df

Este comando muestra un resumen del uso de espacio:

📦 Imágenes (Images)

Todas las imágenes Docker descargadas y en uso.

🔧 Contenedores (Containers)

Contenedores activos y detenidos con sus datos.

💾 Volúmenes (Local Volumes)

Almacenamiento persistente para datos.

⚙️ Caché de builds (Build Cache)

Capas intermedias de construcción de imágenes.

Ver detalles específicos

Si necesitas más detalle sobre cada ítem:

docker system df -v

Aquí verás exactamente:

  • Qué imágenes están en uso y cuáles son huérfanas
  • Qué contenedores ocupan más espacio
  • Qué volúmenes existen y si son asociados

Paso 2: Limpieza básica (segura)

La forma más sencilla para limpiar Docker es utilizar el comando prune. Con este comando puedes eliminar:

  • Contenedores detenidos que ya no se están usando
  • Redes no utilizadas
  • Imágenes "dangling" (sin tag y sin usar)
  • Caché de builds anterior
docker system prune
✓ Es seguro: No elimina volúmenes ni imágenes en uso, por lo que es una opción perfecta para empezar sin miedo.

¿Cuánto espacio libera?

Al ejecutar el comando, Docker te mostrará exactamente cuánto espacio está liberando. Típicamente es entre 500 MB y 5 GB en servidores con bastante movimiento.

Paso 3: Limpieza avanzada de imágenes

Con el tiempo, Docker acumula imágenes antiguas que ya no se usan. Este comando elimina todas las imágenes no usadas por contenedores que actualmente se encuentran activos:

docker system prune -a
⚠️ Atención: Este comando suele liberar una gran cantidad de espacio (a menudo 10-50 GB). Si tienes imágenes que quieres mantener pero no están en uso actualmente, se eliminarán. Úsalo con cuidado si tu servidor es de producción.

Alternativa más segura: elimina solo por edad

Si quieres ser más selectivo, puedes eliminar imágenes que no se han usado en cierto tiempo:

docker image prune -a --filter "until=720h"

Este comando elimina imágenes que no se han usado en más de 30 días (720 horas).

Paso 4: Limpieza de volúmenes

Los volúmenes son especialmente importantes porque almacenan datos persistentes: bases de datos, uploads, logs, etc. Por lo tanto suelen ocupar mucho espacio.

Para eliminar volúmenes que no están asociados a ningún contenedor:

docker volume prune
⚠️ PELIGRO: Pérdida de datos potencial
Si un volumen no está asociado a ningún contenedor, será eliminado. Esto puede suponer pérdida de datos si no se revisa antes. Siempre verifica qué volúmenes vas a eliminar primero:

Listar volúmenes antes de eliminar

docker volume ls docker volume inspect <nombre-volumen>

Esto te muestra qué datos contiene cada volumen antes de eliminarlo.

Paso 5: Limpieza completa (opción nuclear)

Si necesitas liberar el máximo espacio posible, puedes ejecutar este comando que elimina todo lo que no está en uso actualmente:

docker system prune -a --volumes

Esto elimina:

  • Contenedores detenidos
  • Imágenes no utilizadas
  • Redes que no se están usando
  • Volúmenes no asociados
  • Caché de builds
⚠️ Es la opción más agresiva. Úsala solo si sabes exactamente lo que estás eliminando. No hay forma de recuperar datos después.

Paso 6: Identificar contenedores que ocupan mucho

Para ver el tamaño exacto de cada contenedor y detectar cuáles están utilizando más espacio:

docker ps -a --size

Este comando te muestra:

  • El tamaño virtual de cada imagen base
  • El tamaño real en disco (incluyendo datos modificados)
  • Qué contenedores son los "culpables" de ocupar espacio

Los contenedores con mucho espacio en "real size" suelen tener logs grandes o datos acumulados.

Paso 7: El problema común de logs gigantes

Uno de los problemas más frecuentes e ignorados es que Docker no rota logs por defecto. Por lo que se acaban generando logs extremadamente grandes que se almacenan normalmente en:

/var/lib/docker/containers/<container-id>/*-json.log

Estos archivos pueden llegar a ocupar decenas de GB sin que te des cuenta.

Solución rápida: vaciar logs sin detener contenedores

truncate -s 0 /var/lib/docker/containers/*/*-json.log
✓ Ventaja: Los contenedores siguen ejecutándose. No hay downtime.

Solución permanente: configurar rotación de logs

Para que Docker rote los logs automáticamente, edita o crea /etc/docker/daemon.json:

{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }

Esto configura:

  • max-size: Cada archivo de log no supera 10 MB
  • max-file: Se mantienen máximo 3 archivos (30 MB total)

Reinicia Docker para aplicar los cambios:

sudo systemctl restart docker

Tabla de referencia rápida

Tarea Comando Riesgo Espacio liberado
Limpiar básico docker system prune Bajo 500 MB - 2 GB
Eliminar imágenes antiguas docker system prune -a Medio 5 - 50 GB
Eliminar volúmenes docker volume prune Alto (pérdida datos) Variable
Limpieza nuclear docker system prune -a --volumes Muy alto 10 - 100+ GB
Vaciar logs truncate -s 0 /var/lib/docker/containers/*/*-json.log Bajo 1 - 50+ GB

Plan de mantenimiento recomendado

Para evitar que el disco se sature, establece este plan de limpieza periódica:

📅 Semanal

Limpieza básica

docker system prune - Elimina contenedores parados y imágenes huérfanas.

📅 Mensual

Revisar volúmenes

docker volume ls - Identifica volúmenes sin uso y docker volume prune si es necesario.

📅 Mensual

Revisar logs

ls -lh /var/lib/docker/containers/*/*-json.log | sort -k5 -h - Ver qué logs son los más grandes y considerar la rotación.

🔧 Configuración permanente

Rotación automática de logs

Configura /etc/docker/daemon.json para que Docker rote logs automáticamente.

Comandos útiles para el día a día

Ver espacio usado por Docker

du -sh /var/lib/docker/

Ver qué ocupa más espacio en contenedores

docker ps -a --size | sort -k11 -hr

Ver imágenes ordenadas por tamaño

docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k3 -hr

Ver top 10 logs más grandes

find /var/lib/docker/containers -type f -name "*-json.log" -exec ls -lh {} \; | sort -k5 -hr | head -10

Conclusión

Docker es una herramienta poderosa, pero requiere mantenimiento. El espacio en disco no es infinito, y dejar que los logs y las imágenes antiguas se acumulen es una forma segura de que tu servidor se quede sin espacio en el peor momento posible.

Mi recomendación: Implementa una rutina semanal de docker system prune y configura rotación de logs desde el inicio. Con esto evitarás el 90% de los problemas de espacio.

Comentarios

Entradas populares de este blog

Cómo Instalar y configurar SERVIDOR VPN WIREGUARD en MIKROTIK 🔐 #VPN #Wireguard #Mikrotik #RouterOS

Cómo instalar y configurar DSM SYNOLOGY 7.2.2 en PC | Guía completa, instalación, RAID 1, SMB

Cómo INSTALAR y CONFIGURAR OpenVPN en MIKROTIK. Guía completa paso a paso.