hadolintでDockerfileの構文をチェックする
Today I Learned
Dockerfileを使ったGitHub ActionsのActionsを作成している。
Dockerfileは見よう見まねで書いているので、ベストプラクティスに沿った書き方をしたい。
そんなときに利用できるのが、hadolintは、DockerfileのLintツールである。
hadolint をインストールする
Macであればhomebrewを使ってインストールできる。
$ brew install hadolint
hadolint を実行する
Dockerfileをチェックするには、Dockefileがあるディレクトリでhadolint Dockerfile
を実行するだけ。
hadolintでチェックできる内容は、Rulesに記載されている。
たとえば、Dockerイメージのバージョンでlatest
を指定したDockerfileに対して、hadolintを実行したとする。
Dockerfile
FROM node:latest
すると、warningが出力される。latest
を指定すると、Dockerイメージがアップデートしたときに勝手にバージョンがあがってしまう。
バグの温床になりかねないため、バージョンを指定するほうが良いとされている。
$ hadolint Dockerfile
Dockerfile:1 DL3007 warning: Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag
GitHub Actions で hadolint を実行する
GitHub Actionsを使って自動でチェックしたい場合には、hadolint-actionを利用できる。
たとえば、Pull RequestでDockerfileが変更されていたらhadolintを実行したい場合には、次のワークフローを作成する。
hadolint.yml
name: hadolint
on:
pull_request:
paths:
- "Dockerfile"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: hadolint/hadolint-action@v2.0.0
with:
dockerfile: Dockerfile
先ほどのlatest
を指定したDockerfileを含むPull RequestのCIは、エラーで落ちるようになる。