Hadolint — линтер Dockerfile
Haskell Dockerfile Linter (hadolint) — это популярный инструмент статического анализа (линтер) ваших файлов Dockerfile. Он доступен для Mac, Windows и Linux.
Причин использовать инструмент linter для ваших файлов Dockerfile много:
- Используйте лучшие практики для образов Docker
- Ускорьте цикл обратной связи при написании Dockerfiles, поскольку линтер может найти синтаксические ошибки и уязвимости в системе безопасности еще до создания вашего образа.
- Он может проверять нарушения стиля
- Может улучшить читаемость и ремонтопригодность файлов Dockerfile.
- Используйте их в своих пайплайнах CI/CD
- Более глубокие знания о том, как лучше писать Dockerfiles
Сначала нам нужно установить его на нашу машину с Ubuntu (доступно больше альтернатив, если вы используете другую платформу).
# Download hadolint
wget https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64
# Download SHA256 checksum
wget https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64.sha256
# Validate the checksum
sha256sum -c hadolint-Linux-x86_64.sha256
# Make the file executable
chmod +x ./hadolint-Linux-x86_64
# Rename the file
mv hadolint-Linux-x86_64 hadolint
Давайте создадим Dockerfile для тестирования инструмента, добавим в Dockerfile следующее содержимое.
FROM debian
RUN export node_version="0.10" \
&& apt-get update && apt-get -y install nodejs="$node_verion"
COPY package.json usr/src/app
RUN cd /usr/src/app \
&& npm install node-static
EXPOSE 80000
CMD ["npm", "start"]
Теперь проверьте Dockerfile с помощью этой команды.
./hadolint Dockerfile
В результате у вас должно получиться что-то вроде этого.
Каждая строка имеет следующую структуру: <Filename>:<Line number> <Rule identifier> <Severity>: <Description>
Таким образом, первая строка, Dockerfile:1 DL3006 warning:Always tag the version of an image explicitly
, это можно интерпретировать следующим образом:
- Первая строка Dockerfile,
Dockerfile:1
- Cработало правило
DL3006
- И строгость правила
warning
- И имеет описание
Always tag the version of an image explicitly
Чтобы получить более глубокие знания, вы можете иногда использовать идентификатор правила DL3006, чтобы найти его в разделе правил, там перечислены не все, однако это отличный источник, чтобы узнать больше о данной проблеме.
Конечно, также можно настроить инструмент для разных проектов, создав файл конфигурации hadolint.yml. С помощью этого файла вы можете, например, игнорировать правила, определять доверенные репозитории и многое другое.
Здесь также есть онлайн-версия инструмента hadolint, если вы не хотите пробовать его на своем компьютере.
Чтобы настроить инструмент с помощью GitHub Actions, вы можете использовать действие hadolint.
name: Lint Dockerfile
on: push
jobs:
linter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Lint Dockerfile
uses: hadolint/hadolint-action@master
with:
dockerfile: "Dockerfile"
Как видите, с этим инструментом легко начать работу, и он повысит качество ваших файлов Docker за считанные секунды. Hadolint — не единственный линтер для Dockerfiles. Docker Engine также включает в себя один, но больше для проверки основных ошибок. Кроме того, есть инструмент проверки от Snyk, который, вероятно, больше ориентирован на проблемы безопасности.