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:
-
Unterstützung mehrerer Formate Clair kann gängige Linux-Container-Image-Formate analysieren, einschließlich Docker, OCI und RHEL OCI unter anderem.
-
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.
-
Kontinuierliches Monitoring Clair kann den Schwachstellenstatus von Container-Images kontinuierlich überwachen, und es wird sofort neue Schwachstellenaktualisierungen erkennen und melden.
-
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.
-
Flexible Konfiguration Es ist möglich, Konfigurationen anzupassen, wie etwa spezifische Schwachstellen zu ignorieren oder den Schweregrad des Scans einzustellen, unter anderem Funktionalitäten.
-
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.