Aller au contenu

Builder des images avec Buildkit avec Podman

logo docker

Travaillant sur la transformation d’une application pour la rendre cloud native, je me suis intéressé à podman. Pourquoi ? Tout simplement car podman intègre un système de pod. Cela devrait permettre une transition en douceur vers kubernetes. D’ailleurs il est capable de lire les fichiers yaml de kubernetes.

Ce n’est pas le sujet de ce billet qui lui explique comment utiliser buildkit avec Podman.

Installation de Podman et Buildkit

Si docker tourne sur votre machine, il faudra le désinstaller. Podman est le système de container par défaut sur les distribution à base de Redhat.

Terminal window
sudo dnf remove -y docker-ce
sudo dnf install -y podman
podman run alpine:latest uname -a
Linux d0fb3e421dba 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 20:49:28 UTC 2021 x86_64 Linux

Passons à l’installation de buildkit :

Terminal window
wget https://github.com/moby/buildkit/releases/download/v0.9.3/buildkit-v0.9.3.linux-amd64.tar.gz
tar xvfz buildkit-v0.9.3.linux-amd64.tar.gz bin/buildctl
sudo install bin/buildctl /usr/local/bin
rm -r bin

Utilisation de buildkit en mode Standalone

Tout est prêt lançons la construction d’une image avec buildkit. il faut dans un premier temps lancer un container buildkit :

Terminal window
podman run -d --name buildkitd --privileged docker.io/moby/buildkit:latest

Ensuite pour lancer la construction de l’image et l’exporter vers un tarfile avec un simple Dockerfile avec du Here-Documents :

1.3-labs
FROM oraclelinux:8
RUN <<EOF
dnf update
dnf install python39 -y
EOF
Terminal window
buildctl --addr=podman-container://buildkitd build --frontend dockerfile.v0 --local context=./ --local dockerfile=./ --output type=tar >image.tar
file image.tar х INT Py system Ruby 2.7.2 vagrant@devbox 14:19:48
image.tar: POSIX tar archive

Importation de l’image dans podman

Il suffit simplement d’ajouter la commande podman import en respectant le format du nom suivant localhost/nom-container:tag :

Terminal window
buildctl --addr=podman-container://buildkitd build --frontend dockerfile.v0 --local context=./ --local dockerfile=./ --output type=tar | podman import - localhost/test:0.1
podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/test 0.1 120f7c659ed4 31 minutes ago 424 MB
podman run localhost/test:0.1 uname -a
Linux 34fd8f70c480 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 20:49:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Pour rappel buildkit peut produire des images à destination de plusieurs archis en une seule commande et de garder vos secrets au chaud