Saltar al contenido principal

Construcción de imagen de contenedor Clair con Dockerfile

Clair es una herramienta de análisis estático de código abierto para vulnerabilidades de contenedores, utilizada para escanear imágenes de contenedores y detectar vulnerabilidades conocidas dentro de ellas. Tiene las siguientes características clave:

  1. Compatibilidad con Múltiples Formatos Clair puede analizar formatos comunes de imágenes de contenedores deico, solo requiriendo el archivo de imagen del contenedor para completar el escaneo, sin la necesidad de iniciar el contenedor.

  2. Monitoreo Continuo Clair puede monitorear continuamente el estado de vulnerabilidad de las imágenes de contenedores, e inmediatamente detectará e informará cualquier actualización de vulnerabilidad.

  3. Arquitectura de Plugins Clair admite la instalación de plugins de fuentes de datos de terceros, lo que le permite soportar más tipos de imágenes de contenedores y formatos de paquetes de software.

  4. Configuración Flexible Es posible personalizar configuraciones tales como ignorar vulnerabilidades específicas o establecer niveles de severidad de escaneo, entre otras funcionalidades.

  5. Implementación Contenedorizada Clair en sí mismo es una aplicación contenedorizada, que puede ser desplegada y escalada rápidamente a través de contenedores.

Este artículo te guiará sobre cómo construir una imagen de Clair utilizando un Dockerfile, y entender cada paso en el proceso de construcción de la imagen.

Análisis del Dockerfile

FROM golang:alpine as builder

Esta línea define una etapa de construcción llamada builder, con la imagen base golang:alpine. Esto es para aprovechar Go y su cadena de herramientas para compilar el código fuente de Clair.

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

Instala las dependencias necesarias para compilar Clair, que incluyen ca-certificates, git y make.

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

Establece las variables de entorno relacionadas con Go PATH y GOPATH.

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

Utiliza el comando go get para obtener el repositorio fuente de Clair.

ENV CLAIR_VERSION v2.1.4

Especifica la versión de Clair a compilar como v2.1.4.

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

Cambia el directorio de trabajo al directorio fuente de Clair y realiza el checkout de la versión especificada del código.

RUN go install ./cmd/clair

Compila e instala la herramienta de línea de comandos clair en el directorio $GOPATH/bin.

FROM alpine:latest

Una nueva etapa de construcción, con la imagen base alpine:latest.

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

Agrega las dependencias necesarias para ejecutar Clair, como rpm y xz.

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

Copia el ejecutable clair compilado de la etapa builder a la nueva imagen.

ENTRYPOINT ["clair"]

Establece el punto de entrada del contenedor al comando clair.

Script Completo de Dockerfile

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

Resumen

A través de este Dockerfile, hemos completado la compilación del ejecutable de Clair y construido una imagen mínima. Puedes construir la imagen utilizando el siguiente comando:

docker build -t myclair:latest .

Una vez completada la construcción, puedes utilizar esta imagen para iniciar el servicio de Clair para el escaneo de contenedores. Clair se utiliza principalmente en entornos de contenedores, donde complementa el escaneo dinámico en tiempo de ejecución detectando vulnerabilidades conocidas a través del análisis estático, mejorando así de manera integral la seguridad de las aplicaciones de contenedores.

Referencias

clair