Aller au contenu principal

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 :

  1. Formats Multiples Supportés Clair peut analyser les formats d'image de conteneur Linux courants, y compris Docker, OCI et RHEL OCI, entre autres.

  2. 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.

  3. 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é.

  4. 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.

  5. 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.

  6. 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.

Références

clair