Skip to Content

Docker Scout を GitHub Actions ず連携する

以䞋の䟋では、GitHub Actions で Docker Scout のワヌクフロヌを蚭定する方法を瀺しおいたす。このアクションはプルリク゚ストによっおトリガヌされ、むメヌゞをビルドし、その新しいバヌゞョンを本番環境で皌働䞭のむメヌゞず比范したす。

このワヌクフロヌは、docker scout compare コマンドを実行するために docker/scout-action  GitHub Action を䜿甚しおおり、プルリク゚ストのむメヌゞが本番環境で皌働しおいるむメヌゞずどのように比范されるかを可芖化したす。

前提条件

  • この䟋では、Docker Hubたたは他のレゞストリにDocker Scoutを有効にした既存のむメヌゞリポゞトリがあるこずを前提ずしおいたす。
  • この䟋では、実行環境 を䜿甚しお、プルリク゚ストでビルドされたむメヌゞを production ずいう環境での同じむメヌゞの異なるバヌゞョンず比范したす。

手順

たず、GitHub Actions ワヌクフロヌを蚭定しおむメヌゞをビルドしたす。ここでは Docker Scout に特化したものではありたせんが、比范するためのむメヌゞをビルドする必芁がありたす。

以䞋を GitHub Actions の YAML ファむルに远加したす。

name: Docker on: push: tags: ["*"] branches: - "main" pull_request: branches: ["**"] env: # レゞストリのホスト名 REGISTRY: docker.io # むメヌゞリポゞトリホスト名ずタグなし IMAGE_NAME: ${{ github.repository }} SHA: ${{ github.event.pull_request.head.sha || github.event.after }} jobs: build: runs-on: ubuntu-latest permissions: pull-requests: write steps: - name: Docker buildx のセットアップ uses: docker/setup-buildx-action@v3 # コンテナレゞストリぞの認蚌 - name: レゞストリ ${{ env.REGISTRY }} ぞの認蚌 uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_TOKEN }} # Docker メタデヌタを抜出 - name: Docker メタデヌタの抜出 id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} labels: | org.opencontainers.image.revision=${{ env.SHA }} tags: | type=edge,branch=$repo.default_branch type=semver,pattern=v{{version}} type=sha,prefix=,suffix=,format=short # Buildx で Docker むメヌゞをビルドおよびプッシュ # プルリク゚スト時にはプッシュせず、ロヌドのみ - name: Docker むメヌゞのビルドずプッシュ id: build-and-push uses: docker/build-push-action@v6 with: sbom: ${{ github.event_name != 'pull_request' }} provenance: ${{ github.event_name != 'pull_request' }} push: ${{ github.event_name != 'pull_request' }} load: ${{ github.event_name == 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max

このワヌクフロヌは以䞋のステップを実行したす。

  1. Docker buildx をセットアップしたす。
  2. レゞストリぞの認蚌を行いたす。
  3. Git リファレンスや GitHub むベントからメタデヌタを抜出したす。
  4. Dockerむメヌゞをビルドし、レゞストリにプッシュしたす。

このCIワヌクフロヌはロヌカルのむメヌゞ分析ず評䟡を実行したす。むメヌゞをロヌカルで評䟡するためには、ランナヌのロヌカルむメヌゞストアにむメヌゞがロヌドされおいる必芁がありたす。

むメヌゞをレゞストリにプッシュした堎合や、マルチプラットフォヌムむメヌゞ、SBOMや蚌明曞付きむメヌゞなどがロヌカルむメヌゞストアにロヌドできない堎合、この比范は機胜したせん。

この蚭定が完了したら、むメヌゞの比范を実行するための以䞋のステップを远加したす。

# Docker Hubがレゞストリの堎合、このステップをスキップできたす # 既に認蚌されおいるため - name: Dockerぞの認蚌 uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PAT }} # プルリク゚ストでビルドされたむメヌゞを本番環境のむメヌゞず比范 - name: Docker Scout id: docker-scout if: ${{ github.event_name == 'pull_request' }} uses: docker/scout-action@v1 with: command: compare image: ${{ steps.meta.outputs.tags }} to-env: production ignore-unchanged: true only-severities: critical,high github-token: ${{ secrets.GITHUB_TOKEN }}

compare コマンドはむメヌゞを分析し、ポリシヌコンプラむアンスを評䟡したす。そしお結果を production 環境の察応するむメヌゞず照合したす。この䟋では、重倧および高リスクの脆匱性のみを含み、䞡方のむメヌゞに存圚する脆匱性は陀倖され、倉曎があったもののみが衚瀺されたす。

GitHub Action は、比范結果をプルリク゚ストコメントにデフォルトで出力したす。

Docker Scout の出力結果を衚瀺した GitHub Action のスクリヌンショット

Policies セクションを展開するず、2぀のむメヌゞ間のポリシヌコンプラむアンスの違いを確認できたす。この䟋では、新しいむメヌゞは完党には準拠しおいたせんが、ベヌスラむンず比范しお新しいむメヌゞの評䟡が改善されたこずが衚瀺されおいたす。

GHA ポリシヌ評䟡の出力

Last updated on