Buildah : Créer des images sans Docker
Le monde des conteneurs évolue rapidement, tout comme les outils permettant de créer, gérer et déployer des images. Docker a longtemps été l’outil dominant, un réel couteau suisse, mais d’autres solutions, parfois plus légères ou axées sur la sécurité commencent à se faire une place. Buildah en fait partie. Cet article propose une présentation de Buildah : ce que c’est, ce qu’il apporte, comment ça fonctionne, et comment l’utiliser concrètement.
Qu’est-ce que Buildah ?
Section titled “Qu’est-ce que Buildah ?”Buildah est un outil open-source développé par l’équipe de containers chez Red Hat, conçu pour créer et gérer des images de conteneurs au format OCI (Open Container Initiative). Il fait partie de l’écosystème de conteneur en parallèle de Podman, CRI-O et Skopeo.
À la différence de Docker, Buildah ne nécessite pas l’utilisation d’un démon (daemon) en arrière-plan. Cela signifie qu’il s’exécute de manière plus légère, sans un processus persistant, ce qui réduit la surface d’attaque et simplifie la gestion.
Buildah permet de créer des images de conteneurs de manière impérative (commande par commande) ou déclarative (via des Dockerfiles), avec une compatibilité complète. Il s’intègre ainsi parfaitement dans des pipelines CI/CD modernes, offrant une grande flexibilité pour automatiser la création d’images.
Pourquoi utiliser Buildah ?
Section titled “Pourquoi utiliser Buildah ?”- Outil sans démon, plus sécurisé
- Fonctionnement en mode rootless (peut tourner sans privilèges root)
- Compatible avec OCI et Docker
- Intégration facile dans les pipelines
- Contrôle fin sur la construction
Comment fonctionne Buildah ?
Section titled “Comment fonctionne Buildah ?”Buildah fonctionne autour du concept de conteneurs temporaires pour construire des images. Voici les grandes étapes typiques :
- Créer un conteneur de travail basé sur une image existante (ex:
buildah from ubuntu) - Modifier ce conteneur en installant des paquets, copiant des fichiers, configurant des variables d’environnement, etc., via
buildah run,buildah copy,buildah config - Valider et enregistrer ce conteneur sous forme d’image avec
buildah commit - Pousser l’image sur un registre (Docker Hub, Quay, GHCR, …) avec
buildah push
Chaque commande agit directement sur un conteneur temporaire, qui n’est pas forcément lancé comme un conteneur classique mais sert d’espace de travail pour préparer l’image.
Exemple pas à pas : créer une image simple
Section titled “Exemple pas à pas : créer une image simple”Note: Il vous faudra bien-sûr Buildah d’installé
Étape 1 : Préparer la page web
Section titled “Étape 1 : Préparer la page web”<!DOCTYPE html><html lang="fr"><head> <meta charset="UTF-8" /> <title>Ma page avec Buildah</title></head><body> <h1>Bienvenue sur mon site servi par Nginx + Buildah !</h1> <p>Ceci est une page statique.</p></body></html>Ici, on crée une page HTML simple, index.html
Étape 2 : Créer un conteneur basé sur l’image officielle Nginx
Section titled “Étape 2 : Créer un conteneur basé sur l’image officielle Nginx”container=$(buildah from nginx:latest)Étape 3 : Copier la page index.html
Section titled “Étape 3 : Copier la page index.html”buildah copy $container index.html /usr/share/nginx/html/index.htmlÉtape 4 : Valider et nommer l’image
Section titled “Étape 4 : Valider et nommer l’image”Par défaut, l’image de Nginx possède déjà un point d’entrée CMD qui lance le serveur Nginx, donc pas besoin de le redéfinir.
buildah commit $container mon-nginx-buildah:latestÉtape 5 : Tester l’image localement
Section titled “Étape 5 : Tester l’image localement”Si tu as Podman (ou Docker), tu peux lancer ton image :
podman run -d -p 8080:80 mon-nginx-buildah:latestPuis dans ton navigateur ouvre : http://localhost:8080
Résumé des commandes complètes
Section titled “Résumé des commandes complètes”# Préparationcontainer=$(buildah from nginx:latest)
# Copier la page webbuildah copy $container index.html /usr/share/nginx/html/index.html
# Valider l'imagebuildah commit $container mon-nginx-buildah:latestBuildah et Dockerfile : complémentarité
Section titled “Buildah et Dockerfile : complémentarité”Si vous avez déjà des Dockerfiles, vous pouvez utiliser Buildah pour les construire via :
buildah bud -f Dockerfile -t mon-image:latest .bud signifie build using Dockerfile
Liste des commandes Buildah
Section titled “Liste des commandes Buildah”| Commande | Description |
|---|---|
buildah from <image> | Crée un conteneur de travail basé sur une image existante ou scratch (vide) |
buildah containers | Liste les conteneurs de travail créés avec Buildah |
buildah images | Liste les images présentes localement |
buildah run <container> -- <cmd> | Exécute une commande à l’intérieur d’un conteneur de travail. Le -- sépare les options de Buildah de la commande exécutée dans le conteneur |
buildah copy <container> <src> <dst> | Copie un fichier ou dossier de l’hôte vers le conteneur |
buildah add <container> <src> <dst> | Copie un fichier/dossier ou télécharge depuis une URL vers le conteneur |
buildah config [options] <container> | Configure des paramètres du conteneur (CMD, ENV, ENTRYPOINT, USER, WORKDIR, etc.) |
buildah commit <container> <image> | Sauvegarde un conteneur de travail sous forme d’image |
buildah push <image> <dest> | Pousse une image vers un registre (Docker Hub, Quay, etc.) |
buildah pull <image> | Télécharge une image depuis un registre |
buildah bud -f Dockerfile -t <image> <dir> | Construit une image à partir d’un Dockerfile |
buildah tag <image> <nouveau_tag> | Ajoute un nouveau tag à une image existante |
buildah rmi <image> | Supprime une image locale |
buildah rm <container> | Supprime un conteneur de travail |
buildah mount <container> | Monte un conteneur sur le système de fichiers hôte pour y accéder directement |
buildah umount <container> | Démonte un conteneur précédemment monté |
buildah inspect <objet> | Affiche les détails d’un conteneur ou d’une image |
buildah login <registry> | Se connecter à un registre de conteneurs |
buildah logout <registry> | Se déconnecter d’un registre |
buildah version | Affiche la version de Buildah installée |
Aller plus loin
Section titled “Aller plus loin”Si vous souhaitez aller plus loin, je vous invite à consulter les tutoriels de buildah en ligne ici : https://github.com/containers/buildah/tree/main/docs/tutorials