Dockerfileを使用したClairコンテナイメージの構築
Clairは、コンテナイメージをスキャンしてその中の既知の脆弱性を検出するために使用されるオープンソースの静的分析ツールです。以下の主な特徴があります:
-
複数のサポートフォーマット Clairは、Docker、OCI、RHEL OCIなど、一般的なLinuxコンテナイメージフォーマットを分析できます。
-
静的分析 ネットワークベースやランタイムスキャンとは異なり、Clairは静的分析アプローチを使用し、コンテナを起動する必要なくコンテナイメージファイルのみでスキャンを完了できます。
-
連続モニタリング Clairはコンテナイメージの脆弱性ステータスを連続的に監視し、新しい脆弱性アップデートを即座に検出して 報告します。
-
プラグインアーキテクチャ Clairはサードパーティのデータソースプラグインのインストールをサポートし、より多くのタイプのコンテナイメージとソフトウェアパッケージフォーマットをサポートできます。
-
柔軟な設定 特定の脆弱性を無視したり、スキャンの深刻度レベルを設定するなどの設定をカスタマイズすることが可能です。
-
コンテナ化されたデプロイメント 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-certificates
、git
、make
)をインストールします。
ENV PATH /go/bin:/usr/local/go/bin:$PATH
ENV GOPATH /go
Go関連の環境変数PATH
とGOPATH
を設定します。
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を実行するために必要な依存関係(rpm
やxz
など)を追加します。
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は主にコンテナ環境で使用され、静的分析によって既知の脆弱性を検出することで、動的なランタイムスキャンを補完し、 コンテナアプリケーションのセキュリティを総合的に強化します。