Aller au contenu
Infrastructure as Code medium

Packer : concepts et architecture

11 min de lecture

logo packer

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 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.

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.

AspectSans PackerAvec Packer
Création d’imageInstallation manuelle, clics dans l’interfaceUne commande : packer build
Reproductibilité”Ça marchait la dernière fois…”Image identique à chaque build
DocumentationNotes personnelles, wiki obsolèteLe template HCL EST la documentation
Multi-plateformeRefaire le travail pour chaque cibleUn template, plusieurs images
VersioningDifficile à tracerTemplate versionné avec Git

Imaginez que vous devez déployer une application sur 50 serveurs. Sans Packer, vous avez deux options :

  1. Configurer chaque serveur manuellement — long, source d’erreurs, impossible à reproduire
  2. 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.

  • 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

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.

Architecture Packer : Template HCL contenant Builder, Provisioners et Post-processors

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 :

BuilderPlateformeUsage typique
amazon-ebsAWSAMI pour EC2
azure-armAzureImages managées
googlecomputeGCPImages Compute Engine
qemuKVM/libvirtImages locales Linux
proxmox-isoProxmoxTemplates VM
dockerDockerImages conteneur
virtualbox-isoVirtualBoxImages 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 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.

ProvisionerDescriptionCas d’usage
shellExécute des commandes shellScripts bash simples
ansibleExécute des playbooks AnsibleConfiguration complexe
fileCopie des fichiers vers l’imageFichiers de config
powershellScripts PowerShellImages Windows
chef / puppetOutils 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 s’exécutent après la création de l’image pour effectuer des actions supplémentaires :

Post-ProcessorAction
manifestGénère un fichier JSON avec les métadonnées du build
compressCompresse l’image en archive
docker-pushPousse l’image vers Docker Hub ou un registry
checksumCalcule les checksums (sha256, md5)
vagrantConvertit en box Vagrant

Packer suit un workflow en trois étapes que vous utiliserez systématiquement :

  1. packer init — Télécharge les plugins requis

    Cette commande lit le bloc required_plugins de 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
  2. packer validate — Vérifie la syntaxe du template

    Valide 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
  3. packer build — Construit l’image

    Exé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

Quand vous lancez packer build, voici ce qui se passe en coulisses :

  1. Création : le builder démarre une machine temporaire (VM, conteneur…)
  2. Connexion : Packer se connecte via SSH ou WinRM
  3. Provisionnement : les provisioners configurent la machine
  4. Capture : le builder crée une image à partir de la machine
  5. Nettoyage : la machine temporaire est détruite
  6. Post-traitement : les post-processors s’exécutent sur l’image

Un template Packer en HCL (HashiCorp Configuration Language) se compose de plusieurs blocs :

# 1. Bloc packer : version et plugins requis
packer {
required_version = ">= 1.15.0"
required_plugins {
docker = {
version = ">= 1.1.0"
source = "github.com/hashicorp/docker"
}
}
}
# 2. Variables : rendent le template configurable
variable "image_name" {
type = string
default = "mon-app"
description = "Nom de l'image finale"
}
# 3. Source : définit le builder et sa configuration
source "docker" "ubuntu" {
image = "ubuntu:22.04"
commit = true
}
# 4. Build : assemble sources, provisioners et post-processors
build {
sources = ["source.docker.ubuntu"]
provisioner "shell" {
inline = ["apt-get update", "apt-get install -y curl"]
}
}

Packer vs Configuration Management (Ansible, Chef, Puppet)

Section intitulée « Packer vs Configuration Management (Ansible, Chef, Puppet) »
AspectPackerAnsible/Chef/Puppet
QuandAvant le déploiement (build time)Pendant/après le déploiement (run time)
RésultatImage figéeConfiguration dynamique
Temps de démarrageInstantanéDépend de la complexité
Dépendances réseauNonOui (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.

AspectPackerDockerfile
ScopeVMs + conteneursConteneurs uniquement
Multi-plateformeOui (AWS, Azure, QEMU…)Non
ProvisionersShell, Ansible, Chef…Shell uniquement
ÉcosystèmeIntégration Terraform/VaultÉcosystème Docker

En pratique : pour des conteneurs simples, Dockerfile suffit. Pour des VMs ou des images multi-plateformes, utilisez Packer.

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.

Automatisez la création de templates Proxmox ou VMware pour votre infrastructure personnelle. Un seul template pour créer des VMs identiques.

Créez des images de base avec vos standards d’entreprise : outils de debug, certificats, configuration réseau.

Produisez des boxes Vagrant cohérentes pour que tous les développeurs travaillent dans le même environnement.

  • 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 initpacker validatepacker 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

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.