Hadolint ваш персональный ревьюер для Dockerfile

Знакомы с ситуацией, когда после сборки Docker-образа внезапно обнаруживаете, что он весит на гигабайт больше нужного? Или когда bash-скрипты внутри RUN инструкций ведут себя не так, как ожидалось? Проект Hadolint создан именно для решения таких проблем.
Что такое Hadolint?
Hadolint — это статический анализатор для Dockerfile, написанный на Haskell. В отличие от простых валидаторов синтаксиса, он:
- Анализирует Dockerfile на предмет лучших практик
- Проверяет bash-скрипты внутри
RUNинструкций с помощью ShellCheck - Поддерживает гибкую систему правил и исключений
Почему стоит попробовать?
1. Более 100 встроенных правил
Hadolint проверяет Dockerfile по множеству критериев:
- Использование
latestтега (DL3006) - Отсутствие
WORKDIR(DL3000) - Ненужные пакеты в образах (DL3015)
- Проблемы с безопасностью, например, запуск от root (DL3002)
Пример проверки:
hadolint Dockerfile
2. Интеграция с ShellCheck
Hadolint автоматически анализирует bash-код внутри RUN инструкций, выявляя:
- Проблемы с кавычками (SC2086)
- Неправильное использование переменных (SC2154)
- Потенциально опасные конструкции
3. Гибкость настройки
Вы можете:
- Игнорировать определенные правила
# hadolint ignore=DL3006
FROM ubuntu
- Настраивать уровни важности правил
override:
error:
- DL3001
warning:
- DL3042
Как использовать?
Установка через Docker (самый простой способ):
docker run --rm -i hadolint/hadolint < Dockerfile
Или через Homebrew:
brew install hadolint
Интеграции
Hadolint легко встраивается в CI/CD:
- GitHub Actions
- GitLab CI
- Pre-commit хуки
- Плагины для VS Code и других редакторов
Кому особенно пригодится?
- DevOps-инженерам для поддержания стандартов Docker-образов
- Разработчикам, которые хотят избежать распространенных ошибок
- Командам, стремящимся к единому стилю Dockerfile
Hadolint — это не просто линтер, а полноценный помощник в создании оптимальных Docker-образов. С 11k+ звезд на GitHub и активным сообществом, проект доказал свою полезность. Попробуйте — и ваши Dockerfile станут чище, безопаснее и эффективнее.
