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.