Qué hace este linter
Un Dockerfile que técnicamente compila no es lo mismo que un Dockerfile que debería entregarse. La imagen puede tener unos cientos de MB de caché apt residual que nadie usa. Puede correr como root sin HEALTHCHECK, así que K8s nunca sabe que el contenedor está roto. Puede usar tags `:latest` que cambian bajo tus pies. Puede usar `ADD` donde `COPY` sería más seguro. Ninguna de estas para el build, pero cada una causa dolor en producción.
Este linter ejecuta reglas estilo hadolint en tu navegador. Pega tu Dockerfile y obtienes una lista por línea de issues con ID de regla, severidad, descripción y una pista de arreglo. Unas 20 reglas del catálogo estándar de hadolint (`DL3000`, `DL3007`, `DL3008`, ...) más unas pocas comprobaciones custom para USER no configurado, HEALTHCHECK ausente e imagen no fijada por digest.
Todo corre client-side. Sin subidas, sin build, sin contacto con el daemon Docker. La salida es el mismo tipo de feedback que obtendrías ejecutando `hadolint Dockerfile` localmente, solo dentro de la pestaña del navegador.
Cómo usarlo
- Pega tu Dockerfile en el panel de entrada, o elige una de las muestras arriba para ver el formato de salida.
- Lee los contadores de error / warning / info arriba a la derecha. Pulsa cualquier issue para ver el número de línea y la pista de arreglo. Cada issue lleva un ID de regla como `DL3007` que puedes buscar para documentación completa de hadolint.
- Warnings comunes que el linter marca: tag `:latest` (`DL3007`), `apt-get install` sin versiones fijas (`DL3008`) y **sin `rm -rf /var/lib/apt/lists/*` (`DL3009`), `MAINTAINER` que está obsoleto (`DL4000`), `ADD` para ficheros locales donde `COPY` es más seguro (`DL3020`), `CMD` en forma shell en vez de forma exec JSON (`DL3025`), `RUN cd ...`** en lugar de `WORKDIR` (`DL3003`).
- Comprobaciones de seguridad: el contenedor corre como root cuando no hay `USER` configurado, patrones estilo `privileged: true`, imagen no fijada por digest, `HEALTHCHECK` ausente en el stage final.
- Usa el panel "fixed" bajo los issues para ver una reescritura de mejor esfuerzo de los casos simples: `MAINTAINER` se convierte en `LABEL maintainer`, `ADD` se convierte en `COPY` cuando la fuente es local. Los arreglos más complejos (fijar versiones, añadir HEALTHCHECK, partir RUN) necesitan lectura humana.
- Pulsa Copiar en el panel "fixed" para coger la versión reescrita, o Copiar en el panel de entrada para poner el original en tu portapapeles.
- Cuando el linter dice "todo limpio", tienes un Dockerfile que sigue las buenas prácticas conocidas. Puede haber cosas específicas del proyecto que arreglar (tamaño de imagen, orden de capas para caché de build), pero lo básico está cubierto.
Cuándo es útil
Siete situaciones concretas en las que lintear Dockerfile antes de `docker build` ahorra dolores de cabeza reales:
- Revisar el PR de un compañero con un Dockerfile nuevo. El linter da una lista objetiva rápida: fija versiones, quita `:latest`, añade cleanup, añade un usuario no-root. Revisión de código centrada en lógica, no en cada trampa común.
- Primera pasada de limpieza de un Dockerfile legacy. Muchos Dockerfiles antiguos usan `MAINTAINER`, `ADD` para ficheros locales, `apt-get install` sin cleanup, y una imagen final el doble de grande de lo que podría ser. El linter resalta las victorias fáciles.
- Optimizar el tamaño de imagen. `DL3009` (limpieza de listas apt) y `DL3015` (`--no-install-recommends`) juntos pueden reducir imágenes en 100+ MB. `DL3059` (fusionar RUNs consecutivos) reduce el número de capas, lo cual importa a escala.
- Pasada de seguridad. `CUSTOM_USER` marca cada stage que termina corriendo como root. Combinado con `CUSTOM_HEALTH` para el stage final, esto son las comprobaciones mínimas de baseline para hardening antes de entregar.
- Fijar versiones para reproducibilidad. `DL3007` (sin `:latest`), `DL3008` (versiones apt), `DL3018` (versiones apk), `DL3028` (versiones gem), `CUSTOM_DIGEST` (imagen por sha256). Juntos hacen los builds deterministas.
- Enseñar a juniors qué pilla hadolint. Los IDs de regla mapean 1:1 al catálogo público de hadolint para que cualquiera pueda consultarlos y aprender el razonamiento detrás de cada regla.
- Comprobación rápida en el navegador antes de hacer push. `docker build` lleva minutos; el linter es instantáneo. Loop de feedback rápido mientras iteras sobre el Dockerfile.