Zum Hauptinhalt springen

Erstellen eines Clair-Container-Images mit Dockerfile

Clair ist ein Open-Source-Tool für die statische Analyse von Schwachstellen in Containern, das verwendet wird, um Container-Images zu scannen und bekannte Schwachstellen darin zu erkennen. Es hat die folgenden Schlüsselmerkmale:

  1. Unterstützung mehrerer Formate Clair kann gängige Linux-Container-Image-Formate analysieren, einschließlich Docker, OCI und RHEL OCI unter anderem.

  2. Statische Analyse Im Gegensatz zum netzwerkbasierten oder Laufzeit-Scanning verwendet Clair einen statischen Analyseansatz, der nur die Container-Image-Datei benötigt, um den Scan abzuschließen, ohne den Container starten zu müssen.

  3. Kontinuierliches Monitoring Clair kann den Schwachstellenstatus von Container-Images kontinuierlich überwachen, und es wird sofort neue Schwachstellenaktualisierungen erkennen und melden.

  4. Plugin-Architektur Clair unterstützt die Installation von Plugins für Datenquellen von Drittanbietern, die es ermöglichen, mehr Arten von Container-Images und Softwarepaketformaten zu unterstützen.

  5. Flexible Konfiguration Es ist möglich, Konfigurationen anzupassen, wie etwa spezifische Schwachstellen zu ignorieren oder den Schweregrad des Scans einzustellen, unter anderem Funktionalitäten.

  6. Containerisierte Bereitstellung Clair selbst ist eine Container-Anwendung, die schnell durch Container bereitgestellt und skaliert werden kann.

Dieser Artikel wird Sie anleiten, wie Sie ein Clair-Image mit einem Dockerfile erstellen und jeden Schritt im Prozess der Bilderstellung verstehen.

Dockerfile-Analyse

FROM golang:alpine as builder

Diese Zeile definiert eine Build-Phase namens builder mit dem Basis-Image golang:alpine. Dies dient dazu, Go und seine Toolchain zu nutzen, um den Quellcode von Clair zu kompilieren.

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

Installiert die für die Kompilierung von Clair benötigten Abhängigkeiten, einschließlich ca-certificates, git und make.

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

Richtet die Go-bezogenen Umgebungsvariablen PATH und GOPATH ein.

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

Verwendet den Befehl go get, um das Clair-Quellrepository zu holen.

ENV CLAIR_VERSION v2.1.4

Spezifiziert die zu kompilierende Clair-Version als v2.1.4.

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

Wechselt das Arbeitsverzeichnis in das Clair-Quellverzeichnis und checkt die angegebene Version des Codes aus.

RUN go install ./cmd/clair

Kompiliert und installiert das clair-Kommandozeilenwerkzeug im Verzeichnis $GOPATH/bin.

FROM alpine:latest

Eine neue Build-Phase mit dem Basis-Image alpine:latest.

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

Fügt die für den Betrieb von Clair erforderlichen Abhängigkeiten hinzu, wie rpm und xz.

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

Kopiert die kompilierte clair-Ausführungsdatei aus der builder-Phase in das neue Image.

ENTRYPOINT ["clair"]

Setzt den Container-Entry-Point auf den clair-Befehl.

Vollständiges Dockerfile-Skript

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" ]

Zusammenfassung

Durch dieses Dockerfile haben wir die Kompilierung der Clair-Ausführungsdatei abgeschlossen und ein minimales Image erstellt. Sie können das Image mit dem folgenden Befehl erstellen:

docker build -t myclair:latest .

Nachdem der Build abgeschlossen ist, können Sie dieses Image verwenden, um den Clair-Service für das Scannen von Containern zu starten. Clair wird hauptsächlich in Containerumgebungen verwendet, wo es das dynamische Laufzeit-Scanning ergänzt, indem es bekannte Schwachstellen durch statische Analysen erkennt und so die Sicherheit von Containeranwendungen umfassend verbessert.

Referenzen

clair