Aller au contenu principal

Builder des images avec Buildkit avec Podman

· 2 minutes de lecture
Stéphane ROBERT
Consultant DevOps

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.

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