Skip to content
Snippets Groups Projects
Commit 0a0b2d55 authored by Mickael Masquelin's avatar Mickael Masquelin
Browse files

feat(exercices): Ajout exercice build multi arch

parent 5760e12a
No related branches found
No related tags found
No related merge requests found
......@@ -209,3 +209,46 @@ Essayez de faire un `chmod`. Qu'observez-vous ?
Récupérez l'image de Trivy depuis le DockerHub (`aquasec/trivy`). Créez un répertoire local qui va recevoir la base de données des vulnérabilités de l'outil et montez celui-ci dans le répertoire `/root/.cache` d'un conteneur que vous appelerez `scanner`.
Effectuez maintenant un scan de toutes vulnérabilités de l'image `mysql:8.0` depuis le DockerHub (servez-vous de la slide qui présente des exemples d'utilisations de l'outil). Qu'observez-vous ? Faites à nouveau le test avec l'image `mysql:latest`. Quelle est votre conclusion ?
## Construire une image à destination de plusieurs architectures
Vous pouvez, en une seule commande, lancer la construction d’images Docker à destination de plusieurs architectures (intel, arm, etc.). Pour rappel, **BuildKit** est le nouveau moteur de construction d’images intégrant pas mal de nouvelles fonctionnalités.
### Mettre en place le builder
Le générateur est en fait une image, utilisant les fonctionnalités QEMU. Elle tourne au sein d’une instance Docker. C'est une fonctionnalité que l’on retrouve sur la version de Docker Desktop d’ailleurs ... mais elle est cachée.
Pour l'initialiser il faut, en premier lieu, lancer une image permettant d’installer l’outillage nécessaire sur la machine hôte. Cela se fait de la manière suivante :
```bash
$ docker run --privileged --rm tonistiigi/binfmt:latest --install all
```
Vous obtiendrez, en sortie, toutes les builds possibles. Ensuite, il faut créer le builder. Pour utiliser un registre personnel il faudra utiliser un fichier de config (en ajoutant `--config=/path/to/config.toml`). Je vous invite à consulter [ce lien](https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md) pour plus d'infos. Il faudra procéder de la manière suivante :
```bash
$ docker buildx create --driver-opt network=host --driver docker-container --name mybuilder --use mybuilder
```
Nous allons créer un `Dockerfile` très simple. Son contenu est le suivant :
```bash
# syntax=docker/dockerfile:1.3
FROM --platform=$BUILDPLATFORM golang:alpine AS build
ARG TARGETPLATFORM
ARG BUILDPLATFORM
RUN echo "Je suis exécuté sur $BUILDPLATFORM, je construis pour $TARGETPLATFORM" > /log
FROM alpine
COPY --from=build /log /log
```
Vous pouvez désormais lancer le build pour cette image de cette manière :
```bash
# Pour avoir une image adaptée aux plateformes Intel/AMD :
$ docker buildx build --platform linux/amd64 -t masqueli/test-amd64:v1.0.0 --load .
# Pour avoir une image adaptée aux plateformes ARM :
$ docker buildx build --platform linux/arm64 -t masqueli/test-arm64:v1.0.0 --load .
```
Félicitations ! Vous êtes en mesure de délivrer des images multi-plateformes désormais :)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment