はじめに: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点です。
- パッケージのバージョンを固定すべき(再現性のため)
- 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構成で、完全な品質ゲートを実現
コメントを残す