Podman - Builder des images avec Buildkit
Publié le : 22 novembre 2021 | Mis à jour le : 22 janvier 2023Travaillant 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.
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 :
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 :
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
:
# syntax=docker/dockerfile:1.3-labs
FROM oraclelinux:8
RUN <<EOF
dnf update
dnf install python39 -y
EOF
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 :
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