Dockerfileの品質を自動検証!Lintツールによる静的チェック入門

はじめに:Dockerfileにもコード品質がある

Dockerfileを書くとき、つい動くものを優先してしまいがちですが、後から見返すと「この命令順序でいいの?」「キャッシュ効率は最適?」といった課題が出てきます。
こうした品質のばらつきを防ぐために役立つのが、Lintツールによる静的チェックです。

Lintとは、ソースコードを解析して構文ミスやスタイル違反、非推奨な記述を検出するツールのこと。
JavaScriptやPythonなどで使われるESLintやflake8と同様に、DockerfileにもLintツールが存在します。
この記事では代表的なツールHadolintを使い、Dockerfileの品質を自動的にチェックする方法を紹介します。


Hadolintとは

Hadolintは、Dockerfileを静的に解析してベストプラクティス違反を検出するツールです。
Haskellで実装されており、高速で軽量、またルールセットも明確に整理されています。

例えば以下のようなルールが存在します。

  • DL3007: apt-getの後にキャッシュ削除を推奨
  • DL3008: パッケージのバージョン固定を推奨
  • DL4006: SHELL命令の明示を推奨

Hadolintはローカル実行もCI連携も簡単で、チーム開発でのDockerfile品質統一に非常に役立ちます。


Hadolintのインストール

macOSの場合

brew install hadolint

Linuxの場合

wget -O /usr/local/bin/hadolint https://github.com/hadolint/hadolint/releases/latest/download/hadolint-Linux-x86_64
chmod +x /usr/local/bin/hadolint

Windowsの場合

Hadolintのリリースページから.exeファイルをダウンロードしてPATHを通すだけでOKです。
GitHubリポジトリ: https://github.com/hadolint/hadolint


ハンズオン:DockerfileをLintしてみよう

まずはシンプルなDockerfileを用意します。

FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
CMD ["python3"]

このDockerfileをHadolintでチェックしてみましょう。

hadolint Dockerfile

実行結果は次のようになります。

DL3008: Pin versions in apt get install.
DL3007: Use apt-get clean and remove the apt lists after installing something.

Hadolintが指摘しているのは以下の2点です。

  1. パッケージのバージョンを固定すべき(再現性のため)
  2. aptキャッシュを削除してイメージを軽量化すべき

これらのアドバイスに従って修正します。

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 \
    && rm -rf /var/lib/apt/lists/*
CMD ["python3"]

再度Hadolintを実行すると、今度は警告が出ません。
このように、Hadolintを使えば「正しいDockerfileの書き方」を自然に学べます。


CI/CDパイプラインに統合する

HadolintはGitHub ActionsなどのCI環境にも簡単に組み込めます。
以下はGitHub Actionsでプルリク時にDockerfileを自動チェックする例です。

name: Dockerfile Lint

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Hadolint
        uses: hadolint/hadolint-action@v3.1.0
        with:
          dockerfile: Dockerfile

この設定を追加するだけで、DockerfileにLint違反がある場合はPRを自動でブロックできます。
コードレビューの手間を減らし、品質の一貫性を保つことができます。


他のLint・チェックツールも活用しよう

Hadolintは静的解析に強いですが、他にもDockerfileやイメージ全体の品質を確認できるツールがあります。

ツール名主な特徴利点想定用途
Hadolint静的Lint軽量・高速、開発中の品質チェックDockerfile構文チェック
Dockleセキュリティチェックベースイメージや権限設定も検査セキュリティ監査
Dockerfile-lint(Red Hat)柔軟なルール設定組織ガイドライン適用に最適チーム運用

特にDockleは脆弱な権限設定や不要なパッケージを検出するため、Hadolintと併用するとより堅牢なパイプラインを構築できます。


まとめ

Lintツールは単なる警告ツールではなく、品質を自動で守る仕組みです。
Hadolintを導入することで、Dockerfileのスタイルや再現性、セキュリティレベルを標準化できます。

  • チームで統一されたDockerfileルールを実現
  • CI/CDで自動検証し、レビューコストを削減
  • セキュリティ・パフォーマンスの基盤を強化

日々のDockerfile開発にHadolintを取り入れて、品質を「人の目」から「自動チェック」へと進化させましょう。


次のステップ

  • Hadolintのカスタムルールファイルを導入して、社内標準ルールを整備する
  • Dockleを併用してセキュリティチェックも自動化
  • GitHub Actions + Hadolint + Dockleの統合CI構成で、完全な品質ゲートを実現

投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です