Help us understand the problem. What is going on with this article?

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

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: 公式サイトはちゃんと読もう
yahoo-japan-corp
Yahoo! JAPAN を運営しています。
https://www.yahoo.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした