LoginSignup
4
1

More than 3 years have passed since last update.

GitHub ActionsのHadolint Actionを使って安全なDockerfileを運用する

Posted at

GitHub Actions と hadolint を組み合わせて Dockerfile の静的解析を自動化しよう! - kakakakakku blog を読んで、自身のGHAにも組み込んでみた。

hadolint (Haskell Dockerfile Linter)

hadolintとは、DockerfileをDockerfile Best Practicesに沿って解析してくれるツールだそうな。

詳しくは本家へ↓↓

Created by https://ghlinkcard.com/

さっそくGHAに組み込む

めちゃくちゃ簡単!
以下の感じで brpaz/hadolint-action@master を使うだけでGitHub ActionsでDockerfileを解析してくれる!

.github/workflows/workflow.yml
name: Workflow
on: push
jobs:
  build:
    name: Hadolint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Hadolint
        uses: brpaz/hadolint-action@master

結果

GHAの実行結果として、 Dockerfile:23 DL3006 Always tag the version of an image explicitly と返ってきた。

その時のDockerfileが以下

./Dockerfile
    | ...
L23 | FROM gcr.io/distroless/base-debian10
    | ...

ベースイメージのタグを明示的に付けて〜的なやつの警告です。
対応としては、 base-debian10:latest とか base-debian10:v1.0.0 とかにするのだが、この distroless とやらは バージョンタグがなく latest かハッシュ値しか使えない。さらに、今回の対応で latest を指定しても、hadolintで別の警告( DL3007 Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag )が出される。

警告(DL3006)における対応

hadolint公式にHow to useConfigureという項目があり、起動オプションやyamlファイルで設定できるよ〜と書いたあった

ただ、DL3006の警告をすべて無視するとDockerfileのマルチステージビルド時に別の箇所(今回で言うL23以外)で同様の警告が出た際も無視され、本来やりたかったベストプラクティスに沿った安全な運用ができなくなってしまう。

悩んでいると同僚にhadolintにはDockerfileに直接警告を無視するコメントを付与できる、Inline ignoresというのがあることを教えてもらった(感謝!

確かに公式を見てみるとちゃんと書いてあった(公式をちゃんと読もうと再認識した

よって、以下のように1行コメント(Inline ignores)を入れて、再度git pushすると無事にGHAが走りhadolintの警告がなくなった。

./Dockerfile
    | ...
L23 | # hadolint ignore=DL3006
L24 | FROM gcr.io/distroless/base-debian10
    | ...

まとめ

  • hadolintをGHAに簡単に組み込むことができた
  • ベストプラクティスに沿った安全なDockerfileを運用できた
  • Exh: 公式サイトはちゃんと読もう
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1