Поиск по сайту:

Как использовать Hadolint для проверки ваших файлов Docker


Файлы Docker определяют содержимое образов Docker как набор инструкций в текстовом файле. Синтаксис Dockerfile, как правило, прост, но есть некоторые ошибки, которых следует избегать. Придерживаться лучших практик при написании сложных файлов Docker в коллективе может быть сложно, если только вы не проверяете содержимое файла автоматически.

Hadolint — это линтер Dockerfile, который может выявить распространенные проблемы. Он использует абстрактное синтаксическое дерево (AST) для анализа вашего файла Dockerfile на соответствие предопределенным наборам правил. Hadolint также включает в себя ShellCheck, поэтому он также может анализировать сценарии оболочки в инструкциях RUN вашего Dockerfile.

Начиная

Линтинг Dockerfile

Передайте Hadolint путь к Dockerfile, чтобы начать новое сканирование:

hadolint Dockerfile

Если вы используете Dockerized-версию, проще всего передать содержимое вашего файла в контейнер Hadolint:

docker run --rm -i hadolint/hadolint < Dockerfile

Что ищет Хадолинт?

В Hadolint есть десятки встроенных правил, которые проверяют распространенные проблемы с конфигурацией и безопасностью. Линтер стремится сделать ваши файлы Dockerfile совместимыми с рекомендациями по созданию образов, предложенными Docker.

Включенные проверки охватывают использование конечными пользователями без полномочий root, ссылку на относительный путь в операторе WORKDIR, добавление нескольких инструкций HEALTHCHECK и отказ от использования явно закрепленных тегов и версий. Поскольку Hadolint также наследует набор правил ShellCheck, он выявляет распространенные проблемы сценариев Bash, которые также определяет этот инструмент.

Правила идентифицируются как числа с префиксом HL или SC. Правила HL являются частью Hadolint, тогда как записи SC поступают из ShellCheck. Каждой проверке присваивается серьезность от Error до Info. Если вы получаете ошибки в результатах сканирования, это должны быть первые проблемы, которые вы решаете.

Настройка конфигурации

Hadolint настраивается с помощью файла .hadolint.yaml. Он будет искать в нескольких местах, включая ваши рабочие, .config и домашние каталоги. Используется только первый найденный файл — слияния между локациями нет.

Файл конфигурации позволяет настраивать сканирование, игнорируя правила и изменяя их серьезность. Хотя набор правил по умолчанию охватывает рекомендуемые передовые практики, вы можете обнаружить, что некоторые проверки неприменимы в вашей среде. Отправка файла .hadolint.yaml вместе с файлом Dockerfile позволяет соответствующим образом адаптировать сканирование Hadolint. Большинство полей файла конфигурации также поддерживаются как флаги CLI и переменные среды.

Правила отключены полем ignored. Это должен быть список идентификаторов правил:

ignored:
  - DL3010
  - DL3020

Если вам нужно снизить серьезность правила, не отключая его полностью, вместо этого используйте клавишу override. Это также позволяет поднять проблему с низким уровнем серьезности до более высокого уровня. Используйте это, если хотите сделать больший акцент на конкретном вопросе.

override:
  warning:
    - DL3020

Это понизит правило DL3020 с уровня «ошибка» по умолчанию до менее серьезного «предупреждения». Это правило требует, чтобы вы использовали COPY вместо ADD при ссылке на файлы и папки в контексте сборки.

Вы также можете настроить глобальный уровень серьезности. Установка поля failure-threshold указывает Hadolint выйти со статусом сбоя, если какой-либо тест сообщает об ошибке с заданным уровнем серьезности:

failure-threshold: warning

Эта инструкция означает, что сканирование Hadolint завершится ошибкой, если в его выводе будет ошибка или предупреждение.

Вы можете отключить выход с кодом ошибки, используя параметр конфигурации no-fail: true или флаг CLI --no-fail. Это заставит Hadolint выйти с кодом 0 независимо от фактического результата теста. Это может быть полезно, если вы хотите включить Hadolint в качестве неблокирующего задания в конвейер CI.

Доверительные реестры

Другое использование файла конфигурации — определение доверенных реестров, на которые вы хотите иметь возможность ссылаться в своих файлах Docker. Когда поле trustedRegistries установлено, Hadolint будет предупреждать вас, когда используется образ из другого реестра:

trustedRegistries:
  - docker.io
  - docker-registry.example.com

Схемы этикеток

Hadolint также предлагает базовый линтинг этикеток. Это позволяет вам обеспечить, чтобы метки, добавленные к вашему образу с помощью инструкций Dockerfile LABEL, соответствовали указанным ограничениям. Вот пример того, как это работает:

label-schema:
  notes: text
  app-version: semver
  built-at: rfc3339

Этот фрагмент конфигурации определяет типы данных для четырех меток, которые вы можете использовать в своем Dockerfile. notes объявляется как произвольное текстовое поле, а app-version должен быть идентификатором версии, совместимой с semver. встроенный помечен как строка даты и времени RFC-3339. Вы можете получить полный список поддерживаемых типов в документации Hadolint.

Hadolint разрешает использовать метки, не указанные в вашей схеме. Вы можете отключить это и ограничить инструкции LABEL только теми, которые присутствуют в схеме, установив strict-labels: true или используя --strict-labels флаг.

Выходные форматы

Несколько выходных форматов поддерживаются с помощью параметра format или флага --format. По умолчанию используется tty, который выводит раскрашенный вывод на ваш терминал. Цвета можно отключить с помощью флага --no-color.

Доступны следующие альтернативные средства форматирования:

  • json — предоставляет список обнаруженных проблем в виде подробной структуры JSON, которая идеально подходит для использования с вашими собственными скриптами.
  • checkstyle — отчет, совместимый с Checkstyle.
  • codeclimate — отчет, совместимый с Code Climate.
  • gitlab_codeclimate — вариант отчета Code Climate, который работает с интегрированными функциями качества кода GitLab. Это позволяет просматривать ошибки в виде виджета на страницах мерж-реквестов при запуске Hadolint с GitLab CI.

Эти форматы вывода идеально подходят для использования Hadolint программно или как часть конвейера непрерывной интеграции.

Краткое содержание

Hadolint автоматизирует обнаружение проблем с Dockerfile. Это помогает вашим образам Docker соответствовать лучшим практикам и организационным стандартам. Конфигурация по умолчанию является хорошей отправной точкой, но вы можете настроить ее в соответствии со своими потребностями, переклассифицируя и отключая правила.

Вам следует рассмотреть возможность интеграции Hadolint с вашим инструментом непрерывной интеграции, чтобы получать мгновенные отчеты по мере внесения изменений в Dockerfile. Это ускоряет проверку кода, предоставляя разработчикам немедленную видимость проблем. Вы также можете использовать этот инструмент локально во время работы с расширениями редактора, поддерживаемыми сообществом, что обеспечивает еще более короткий цикл обратной связи.




Все права защищены. © Linux-Console.net • 2019-2024