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は、エラーで落ちるようになる。

画面キャプチャ:hadolint の GitHub Actions でエラーになっている