
Ce guide vous explique les concepts fondamentaux de Packer pour que vous puissiez créer vos premières images machine reproductibles. Vous comprendrez comment Packer automatise la création d’images identiques pour le cloud, les VMs locales ou les conteneurs, le tout à partir d’un simple fichier de configuration.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Ce qu’est Packer et pourquoi l’utiliser
- Les trois composants clés : builders, provisioners, post-processors
- Le workflow complet : init → validate → build
- Quand choisir Packer plutôt qu’une autre approche
Prérequis : aucun. Ce guide est une introduction aux concepts.
Qu’est-ce que Packer ?
Section intitulée « Qu’est-ce que Packer ? »Packer est un outil open source créé par HashiCorp qui automatise la création d’images machine. Une image machine, c’est une “photo” d’un système d’exploitation configuré et prêt à l’emploi — pensez-y comme un moule pour créer des VMs ou des conteneurs identiques.
Pour faire une analogie simple : si votre infrastructure était une cuisine, Packer serait la recette écrite qui permet de reproduire exactement le même plat à chaque fois, peu importe qui cuisine et dans quelle cuisine.
| Aspect | Sans Packer | Avec Packer |
|---|---|---|
| Création d’image | Installation manuelle, clics dans l’interface | Une commande : packer build |
| Reproductibilité | ”Ça marchait la dernière fois…” | Image identique à chaque build |
| Documentation | Notes personnelles, wiki obsolète | Le template HCL EST la documentation |
| Multi-plateforme | Refaire le travail pour chaque cible | Un template, plusieurs images |
| Versioning | Difficile à tracer | Template versionné avec Git |
Pourquoi utiliser Packer ?
Section intitulée « Pourquoi utiliser Packer ? »Imaginez que vous devez déployer une application sur 50 serveurs. Sans Packer, vous avez deux options :
- Configurer chaque serveur manuellement — long, source d’erreurs, impossible à reproduire
- Utiliser un outil de configuration à chaque démarrage — lent, dépendant du réseau
Avec Packer, vous créez une seule fois une image “golden” qui contient tout : système d’exploitation, dépendances, configuration de sécurité. Ensuite, vous déployez cette image sur vos 50 serveurs en quelques minutes.
Les bénéfices concrets
Section intitulée « Les bénéfices concrets »- Déploiement rapide : une VM prête en secondes au lieu de minutes de configuration
- Cohérence : tous les serveurs sont identiques, pas de “configuration drift”
- Sécurité : les correctifs sont intégrés dans l’image, pas appliqués après coup
- Audit : le template décrit exactement ce qui est installé
- Multi-cloud : une même configuration pour AWS, Azure, GCP, on-premise
Architecture de Packer
Section intitulée « Architecture de Packer »Packer fonctionne avec trois types de composants qui s’exécutent dans un ordre précis. Comprendre cette architecture est essentiel pour écrire des templates efficaces.
Les Builders : créer la machine de base
Section intitulée « Les Builders : créer la machine de base »Le builder est responsable de créer une machine temporaire et de produire une image à partir de celle-ci. Chaque builder est spécifique à une plateforme :
| Builder | Plateforme | Usage typique |
|---|---|---|
amazon-ebs | AWS | AMI pour EC2 |
azure-arm | Azure | Images managées |
googlecompute | GCP | Images Compute Engine |
qemu | KVM/libvirt | Images locales Linux |
proxmox-iso | Proxmox | Templates VM |
docker | Docker | Images conteneur |
virtualbox-iso | VirtualBox | Images de dev |
Packer supporte plus de 52 builders via son système de plugins. Les builders officiels maintenu par HashiCorp sont téléchargés depuis releases.hashicorp.com.
Les Provisioners : configurer l’image
Section intitulée « Les Provisioners : configurer l’image »Les provisioners s’exécutent après que le builder a créé la machine temporaire. Ils configurent le système : installer des paquets, copier des fichiers, exécuter des scripts.
| Provisioner | Description | Cas d’usage |
|---|---|---|
shell | Exécute des commandes shell | Scripts bash simples |
ansible | Exécute des playbooks Ansible | Configuration complexe |
file | Copie des fichiers vers l’image | Fichiers de config |
powershell | Scripts PowerShell | Images Windows |
chef / puppet | Outils de configuration | Écosystèmes existants |
L’ordre des provisioners dans le template détermine leur ordre d’exécution. Packer les exécute séquentiellement.
Les Post-Processors : finaliser l’artefact
Section intitulée « Les Post-Processors : finaliser l’artefact »Les post-processors s’exécutent après la création de l’image pour effectuer des actions supplémentaires :
| Post-Processor | Action |
|---|---|
manifest | Génère un fichier JSON avec les métadonnées du build |
compress | Compresse l’image en archive |
docker-push | Pousse l’image vers Docker Hub ou un registry |
checksum | Calcule les checksums (sha256, md5) |
vagrant | Convertit en box Vagrant |
Le workflow Packer
Section intitulée « Le workflow Packer »Packer suit un workflow en trois étapes que vous utiliserez systématiquement :
-
packer init— Télécharge les plugins requisCette commande lit le bloc
required_pluginsde votre template et télécharge les plugins nécessaires. À exécuter une seule fois par projet (ou quand vous ajoutez un nouveau plugin).Fenêtre de terminal packer init mon-template.pkr.hcl -
packer validate— Vérifie la syntaxe du templateValide que le template HCL est syntaxiquement correct et que toutes les références sont valides. Cette commande ne crée rien, elle vérifie simplement.
Fenêtre de terminal packer validate mon-template.pkr.hcl -
packer build— Construit l’imageExécute le builder, les provisioners et les post-processors pour créer l’image finale.
Fenêtre de terminal packer build mon-template.pkr.hcl
Ce qui se passe pendant un build
Section intitulée « Ce qui se passe pendant un build »Quand vous lancez packer build, voici ce qui se passe en coulisses :
- Création : le builder démarre une machine temporaire (VM, conteneur…)
- Connexion : Packer se connecte via SSH ou WinRM
- Provisionnement : les provisioners configurent la machine
- Capture : le builder crée une image à partir de la machine
- Nettoyage : la machine temporaire est détruite
- Post-traitement : les post-processors s’exécutent sur l’image
Structure d’un template Packer
Section intitulée « Structure d’un template Packer »Un template Packer en HCL (HashiCorp Configuration Language) se compose de plusieurs blocs :
# 1. Bloc packer : version et plugins requispacker { required_version = ">= 1.15.0"
required_plugins { docker = { version = ">= 1.1.0" source = "github.com/hashicorp/docker" } }}
# 2. Variables : rendent le template configurablevariable "image_name" { type = string default = "mon-app" description = "Nom de l'image finale"}
# 3. Source : définit le builder et sa configurationsource "docker" "ubuntu" { image = "ubuntu:22.04" commit = true}
# 4. Build : assemble sources, provisioners et post-processorsbuild { sources = ["source.docker.ubuntu"]
provisioner "shell" { inline = ["apt-get update", "apt-get install -y curl"] }}Comparaison avec d’autres approches
Section intitulée « Comparaison avec d’autres approches »Packer vs Configuration Management (Ansible, Chef, Puppet)
Section intitulée « Packer vs Configuration Management (Ansible, Chef, Puppet) »| Aspect | Packer | Ansible/Chef/Puppet |
|---|---|---|
| Quand | Avant le déploiement (build time) | Pendant/après le déploiement (run time) |
| Résultat | Image figée | Configuration dynamique |
| Temps de démarrage | Instantané | Dépend de la complexité |
| Dépendances réseau | Non | Oui (repos, registries) |
En pratique : utilisez les deux ensemble. Packer avec Ansible en provisioner pour créer des images, puis Ansible pour les mises à jour légères post-déploiement.
Packer vs Dockerfile
Section intitulée « Packer vs Dockerfile »| Aspect | Packer | Dockerfile |
|---|---|---|
| Scope | VMs + conteneurs | Conteneurs uniquement |
| Multi-plateforme | Oui (AWS, Azure, QEMU…) | Non |
| Provisioners | Shell, Ansible, Chef… | Shell uniquement |
| Écosystème | Intégration Terraform/Vault | Écosystème Docker |
En pratique : pour des conteneurs simples, Dockerfile suffit. Pour des VMs ou des images multi-plateformes, utilisez Packer.
Cas d’usage typiques
Section intitulée « Cas d’usage typiques »Golden Images pour le cloud
Section intitulée « Golden Images pour le cloud »Créez une AMI AWS pré-configurée avec vos outils de monitoring, agents de sécurité et configurations réseau. Chaque nouvelle instance démarre avec tout ce qu’il faut.
Templates pour homelab
Section intitulée « Templates pour homelab »Automatisez la création de templates Proxmox ou VMware pour votre infrastructure personnelle. Un seul template pour créer des VMs identiques.
Images Docker standardisées
Section intitulée « Images Docker standardisées »Créez des images de base avec vos standards d’entreprise : outils de debug, certificats, configuration réseau.
Environnements de développement
Section intitulée « Environnements de développement »Produisez des boxes Vagrant cohérentes pour que tous les développeurs travaillent dans le même environnement.
Pièges courants
Section intitulée « Pièges courants »À retenir
Section intitulée « À retenir »- Packer automatise la création d’images machine reproductibles (VMs, conteneurs)
- Builders créent la machine temporaire (AWS, Docker, QEMU, Proxmox…)
- Provisioners configurent l’image (Shell, Ansible, File…)
- Post-processors finalisent l’artefact (compress, push, manifest…)
- Workflow :
packer init→packer validate→packer build - HCL2 est le format de template recommandé depuis v1.7.0
- Golden images = images de référence pré-configurées et validées