メインコンテンツまでスキップ

Dockerfileを使用したClairコンテナイメージの構築

Clairは、コンテナイメージをスキャンしてその中の既知の脆弱性を検出するために使用されるオープンソースの静的分析ツールです。以下の主な特徴があります:

  1. 複数のサポートフォーマット Clairは、Docker、OCI、RHEL OCIなど、一般的なLinuxコンテナイメージフォーマットを分析できます。

  2. 静的分析 ネットワークベースやランタイムスキャンとは異なり、Clairは静的分析アプローチを使用し、コンテナを起動する必要なくコンテナイメージファイルのみでスキャンを完了できます。

  3. 連続モニタリング Clairはコンテナイメージの脆弱性ステータスを連続的に監視し、新しい脆弱性アップデートを即座に検出して報告します。

  4. プラグインアーキテクチャ Clairはサードパーティのデータソースプラグインのインストールをサポートし、より多くのタイプのコンテナイメージとソフトウェアパッケージフォーマットをサポートできます。

  5. 柔軟な設定 特定の脆弱性を無視したり、スキャンの深刻度レベルを設定するなどの設定をカスタマイズすることが可能です。

  6. コンテナ化されたデプロイメント Clair自体はコンテナアプリケーションであり、コンテナを通じて迅速にデプロイされスケールアップできます。

この記事では、Dockerfileを使用してClairイメージを構築する方法と、イメージ構築プロセスの各ステップを理解する方法について案内します。

Dockerfileの分析

FROM golang:alpine as builder

この行は、builderという名前のビルドステージを定義しており、ベースイメージはgolang:alpineです。これはGoとそのツールチェーンを活用してClairのソースコードをコンパイルするためのものです。

RUN apk --no-cache add \
ca-certificates \
git \
make

Clairをコンパイルするために必要な依存関係(ca-certificatesgitmake)をインストールします。

ENV PATH /go/bin:/usr/local/go/bin:$PATH
ENV GOPATH /go

Go関連の環境変数PATHGOPATHを設定します。

RUN go get github.com/quay/clair/cmd/clair || true

go getコマンドを使用してClairのソースリポジトリを取得します。

ENV CLAIR_VERSION v2.1.4

コンパイルするClairのバージョンをv2.1.4として指定します。

WORKDIR /go/src/github.com/quay/clair
RUN git checkout "${CLAIR_VERSION}"

作業ディレクトリをClairのソースディレクトリに変更し、指定されたバージョンのコードをチェックアウトします。

RUN go install ./cmd/clair

clairコマンドラインツールを$GOPATH/binディレクトリにコンパイルしてインストールします。

FROM alpine:latest

新しいビルドステージで、ベースイメージはalpine:latestです。

RUN apk --no-cache add \
ca-certificates \
git \
rpm \
xz

Clairを実行するために必要な依存関係(rpmxzなど)を追加します。

COPY --from=builder /go/bin/clair /usr/bin/clair

コンパイルされたclair実行可能ファイルをbuilderステージから新しいイメージにコピーします。

ENTRYPOINT ["clair"]

コンテナのエントリーポイントをclairコマンドに設定します。

完成したDockerfileスクリプト

FROM golang:alpine as builder

RUN apk --no-cache add \
ca-certificates \
git \
make

ENV PATH /go/bin:/usr/local/go/bin:$PATH
ENV GOPATH /go

RUN go get github.com/quay/clair/cmd/clair || true

ENV CLAIR_VERSION v2.1.4

WORKDIR /go/src/github.com/quay/clair

RUN git checkout "${CLAIR_VERSION}"

RUN go install ./cmd/clair

FROM alpine:latest

RUN apk --no-cache add \
ca-certificates \
git \
rpm \
xz

COPY --from=builder /go/bin/clair /usr/bin/clair

ENTRYPOINT [ "clair" ]

要約

このDockerfileを通して、Clair実行可能ファイルのコンパイルと最小のイメージの構築を完了しました。次のコマンドを使用してイメージをビルドできます:

docker build -t myclair:latest .

ビルドが完了したら、このイメージを使用してコンテナスキャンのためのClairサービスを開始できます。Clairは主にコンテナ環境で使用され、静的分析によって既知の脆弱性を検出することで、動的なランタイムスキャンを補完し、コンテナアプリケーションのセキュリティを総合的に強化します。

参考文献

clair