Ya queda poco para que comience el Bootcamp de DevOps de Lemoncode y es por ello que estoy revisando y actualizando el contenido de todas las demos que tengo para contar Docker. Aprovechando que estas tienen un año he querido escanear aquellas imágenes que utilicé entonces en busca de vulnerabilidades ¡y bingo! no puedes descuidarte tampoco en este aspecto, al igual que con los secretos. En este artículo te cuento cómo lo hago.
Dockerfile de ejemplo
Para que veas cómo ejecutarlo y qué información te aporta voy a utilizar este Dockerfile de ejemplo:
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "app.py"]
Lo primero que debemos hacer es generar la imagen en local a través del siguiente comando:
docker build -t 0gis0/python-app .
Ahora ya tenemos una imagen que analizar.
Escanear la imagen desde el cliente de Docker
La forma de hacer este proceso es súper sencilla, gracias a integración que se ha hecho con el servicio Snyk. Para comenzar el escaneo solo debes ejecutar lo siguiente:
docker scan 0gis0/python-app
Esto comenzará con el análisis donde devolverá una salida más o menos extensa, dependiendo de las vulnerabilidades que encuentre, y con un resumen final:

En él, como ves, no solo te dice cuántas vulnerabilidades ha encontrado, incluso si haces scroll hacia arriba puedes ver en detalle cuáles son y su criticidad, sino que además te hace recomendaciones en cuanto a la imagen base que deberías de utilizar. En mi caso me ofrece varias alternativas, por lo que voy a modificar mi Dockerfile con la primera de las opciones:
FROM python:3.7.11-slim
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "app.py"]
Si vuelvo a generar la imagen y a escanearla:
docker build -t 0gis0/python-app . && docker scan 0gis0/python-app
Verás que la salida ahora muestra muchas menos vulnerabilidades y en este caso te dice que ahora ya estás usando la imagen base más segura:

También puedes incluso obtener un informe más detallado, si añades al comando el Dockerfile que genera la imagen:
docker scan -f Dockerfile 0gis0/python-app
E incluso excluir del análisis la imagen base, por si solo quieres centrarte el «lo que has hecho mal tú» 😛
docker scan -f Dockerfile --exclude-base 0gis0/python-app
Este servicio también puede integrarse con los repositorios de Docker Hub:
Pero para ello debes tener una de las suscripciones de pago.
Sin embargo, puedes lanzarlo en local, con el plan gratuito que tienes solo por estar logado a Docker Hub (tiene limites de escaneo claro), mientras desarrollas o quieres comprobar cómo de segura es una imagen de terceros que quieres usar.
¡Saludos!

Bootcamp DevOps
Si tienes ganas de meterte en el área de DevOps, formo parte del
equipo de docentes del Bootcamp DevOps Lemoncode, ¿Te animas a
aprender con nosotros?