Construction d'une image de conteneur Clair avec Dockerfile
Clair est un outil d'analyse statique open-source pour les vulnérabilités de conteneurs, utilisé pour scanner les images de conteneurs et détecter les vulnérabilités connues à l'intérieur. Il possède les caractéristiques clés suivantes :
-
Formats Multiples Supportés Clair peut analyser les formats d'image de conteneur Linux courants, y compris Docker, OCI et RHEL OCI, entre autres.
-
Analyse Statique Contrairement au scan basé sur le réseau ou au scan en temps réel, Clair utilise une approche d'analyse statique, nécessitant uniquement le fichier image du conteneur pour compléter le scan, sans avoir besoin de démarrer le conteneur.
-
Surveillance Continue Clair peut surveiller en continu l'état de vulnérabilité des images de conteneurs, et détectera et signalera immédiatement toute nouvelle mise à jour de vulnérabilité.
-
Architecture de Plugins Clair supporte l'installation de plugins de sources de données tiers, lui permettant de supporter plus de types d'images de conteneurs et de formats de paquets logiciels.
-
Configuration Flexible Il est possible de personnaliser les configurations telles que l'ignorance de vulnérabilités spécifiques ou la définition des niveaux de gravité des scans, parmi d'autres fonctionnalités.
-
Déploiement Conteneurisé Clair lui-même est une application conteneurisée, qui peut être rapidement déployée et mise à l'échelle à travers des conteneurs.
Cet article vous guidera sur la manière de construire une image Clair en utilisant un Dockerfile, et de comprendre chaque étape du processus de construction de l'image.
Analyse du Dockerfile
FROM golang:alpine as builder
Cette ligne définit une étape de construction nommée builder
, avec l'image de base golang:alpine
. Cela permet d'utiliser Go et sa chaîne d'outils pour compiler le code source de Clair.
RUN apk --no-cache add \
ca-certificates \
git \
make
Installe les dépendances requises pour compiler Clair, qui incluent ca-certificates
, git
et make
.
ENV PATH /go/bin:/usr/local/go/bin:$PATH
ENV GOPATH /go
Configure les variables d'environnement liées à Go PATH
et GOPATH
.
RUN go get github.com/quay/clair/cmd/clair || true
Utilise la commande go get
pour récupérer le dépôt source de Clair.
ENV CLAIR_VERSION v2.1.4
Spécifie la version de Clair à compiler comme v2.1.4
.
WORKDIR /go/src/github.com/quay/clair
RUN git checkout "${CLAIR_VERSION}"
Change le répertoire de travail pour le répertoire source de Clair et extrait la version spécifiée du code.
RUN go install ./cmd/clair
Compile et installe l'outil en ligne de commande clair
dans le répertoire $GOPATH/bin
.
FROM alpine:latest
Une nouvelle étape de construction, avec l'image de base alpine:latest
.
RUN apk --no-cache add \
ca-certificates \
git \
rpm \
xz
Ajoute les dépendances requises pour exécuter Clair, telles que rpm
et xz
.
COPY --from=builder /go/bin/clair /usr/bin/clair
Copie l'exécutable clair
compilé de l'étape builder
vers la nouvelle image.
ENTRYPOINT ["clair"]
Définit le point d'entrée du conteneur sur la commande clair
.
Script Dockerfile Complet
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" ]
Résumé
Grâce à ce Dockerfile, nous avons terminé la compilation de l'exécutable Clair et construit une image minimale. Vous pouvez construire l'image en utilisant la commande suivante :
docker build -t myclair:latest .
Après la construction, vous pouvez utiliser cette image pour démarrer le service Clair pour le scan de conteneurs. Clair est principalement utilisé dans les environnements de conteneurs, où il complète le scan dynamique en temps réel en détectant les vulnérabilités connues par l'analyse statique, améliorant ainsi de manière globale la sécurité des applications de conteneurs.