Co robi ten linter
Dockerfile, który technicznie się buduje, to nie to samo, co Dockerfile, który powinien iść na produkcję. Obraz może mieć kilkaset MB pozostałego cache apt, którego nikt nie używa. Może działać jako root bez HEALTHCHECK, więc K8s nigdy nie wie, że kontener jest popsuty. Może używać tagów `:latest`, które się zmieniają pod nogami. Może używać `ADD` tam, gdzie `COPY` byłoby bezpieczniejsze. Żadne z tego nie zatrzyma builda, ale każde powoduje ból na produkcji.
Ten linter uruchamia reguły w stylu hadolint w Twojej przeglądarce. Wklejasz Dockerfile, dostajesz listę problemów per linia z ID reguły, poziomem, opisem i podpowiedzią naprawy. Około 20 reguł ze standardowego katalogu hadolint (`DL3000`, `DL3007`, `DL3008`, ...) plus parę custom checków na brak USER, brak HEALTHCHECK i brak pinowania obrazu do digestu.
Wszystko działa client-side. Bez uploadu, bez builda, bez kontaktu z daemon Dockera. Wynik to ten sam rodzaj feedbacku, jaki dostałbyś z lokalnego `hadolint Dockerfile`, tylko w zakładce przeglądarki.
Jak używać
- Wklej Dockerfile w panelu wejściowym albo wybierz jeden z przykładów u góry, żeby zobaczyć format wyniku.
- Po prawej masz liczniki błędów / ostrzeżeń / info. Kliknij dowolny issue, żeby zobaczyć numer linii i podpowiedź naprawy. Każdy issue ma ID reguły typu `DL3007`, które możesz wyszukać w dokumentacji hadolint.
- Częste ostrzeżenia, które linter łapie: tag `:latest` (`DL3007`), `apt-get install` bez pinowania wersji (`DL3008`) i **bez `rm -rf /var/lib/apt/lists/*` (`DL3009`), `MAINTAINER` które jest deprecated (`DL4000`), `ADD` na lokalnych plikach, gdzie `COPY` jest bezpieczniejsze (`DL3020`), `CMD` w formie powłoki zamiast JSON exec (`DL3025`), `RUN cd ...`** zamiast `WORKDIR` (`DL3003`).
- Sprawdzenia bezpieczeństwa: kontener jako root, gdy nie ustawiono `USER`, wzorce typu `privileged: true`, obraz nie pinowany do digestu, brak `HEALTHCHECK` w finalnym etapie.
- Użyj panelu „fixed" pod listą issues, żeby zobaczyć best-effort przeróbkę prostych przypadków: `MAINTAINER` staje się `LABEL maintainer`, `ADD` staje się `COPY`, gdy źródło jest lokalne. Bardziej złożone fixy (pinowanie wersji, dodanie HEALTHCHECK, łączenie RUN) wymagają ludzkiego przejrzenia.
- Kliknij Kopiuj w panelu „fixed", żeby zgarnąć przerobioną wersję, albo Kopiuj w panelu wejściowym, żeby wrzucić oryginał do schowka.
- Jeśli linter mówi „czysto", masz Dockerfile zgodny z dobrze znanymi dobrymi praktykami. Wciąż mogą być rzeczy projektowe do poprawy (rozmiar obrazu, kolejność warstw dla cache builda), ale podstawy są pokryte.
Kiedy się przydaje
Siedem konkretnych sytuacji, w których lintowanie Dockerfile przed `docker build` oszczędza realne nerwy:
- Review PR-a kolegi z nowym Dockerfile. Linter daje szybką obiektywną listę: pinuj wersje, wyrzuć `:latest`, dodaj cleanup, dodaj non-root usera. Review skupia się na logice, nie na każdej oczywistej pułapce.
- Pierwsze czyszczenie starego Dockerfile. Wiele starych Dockerfile używa `MAINTAINER`, `ADD` na lokalnych plikach, `apt-get install` bez cleanupu i finalny obraz jest dwa razy większy, niż mógłby być. Linter podświetla łatwe wygrane.
- Optymalizacja rozmiaru obrazu. `DL3009` (cleanup list apt) i `DL3015` (`--no-install-recommends`) razem potrafią obciąć obrazy o 100+ MB. `DL3059` (łączenie kolejnych RUN) zmniejsza liczbę warstw, co ma znaczenie przy skali.
- Audyt bezpieczeństwa. `CUSTOM_USER` flaguje każdy etap, który kończy jako root. W połączeniu z `CUSTOM_HEALTH` na finalnym etapie to minimum przed hartowaniem przed wysyłką.
- Pinowanie wersji dla powtarzalności. `DL3007` (brak `:latest`), `DL3008` (wersje apt), `DL3018` (wersje apk), `DL3028` (wersje gem), `CUSTOM_DIGEST` (obraz po sha256). Razem czynią buildy deterministycznymi.
- Nauczanie juniorów, co łapie hadolint. ID reguł mapują się 1:1 do publicznego katalogu hadolint, więc każdy może je sprawdzić i nauczyć się uzasadnienia każdej reguły.
- Szybki check w przeglądarce przed pushem. `docker build` trwa minuty; linter jest natychmiastowy. Krótki feedback loop podczas iteracji nad Dockerfile.