Aller au contenu

imglife build

imglife build [nom] [flags]

Quand l’argument optionnel [nom] est fourni, seule l’image dont le champ name correspond est construite (ex. golang-core). Sans argument, toutes les images de build.images sont construites.

Pour chaque image dans build.images, imglife :

  1. Rend Dockerfile.tmpl avec les variables de l’image.
  2. Injecte les labels OCI (date de build, révision git, référence image de base).
  3. Appelle docker build (ou docker buildx build pour le multi-arch).
  4. Pousse l’image vers le registry configuré.
  5. Exécute les hooks post_image_build.
Flag Défaut Description
--dry-run false Rendre les Dockerfiles sans construire ni pousser
--list false Afficher ce qui serait construit et quitter
--force false Écraser les images existantes dans le registry
--output-dir string Écrire les contextes de build dans un répertoire au lieu de construire
Terminal window
# Construire toutes les images configurées
imglife build
# Construire uniquement l'image nommée "golang-core"
imglife build golang-core
# Aperçu — afficher quelles images seraient construites
imglife build --list
# Dry-run — rendre les Dockerfiles, sans docker build
imglife build --dry-run
# Force — reconstruire même si l'image existe déjà dans le registry
imglife build --force
# Écrire les contextes pour un builder externe (Kaniko, Buildah)
imglife build --output-dir /tmp/build-contexts

Quand --output-dir est défini, imglife écrit un sous-répertoire par image :

/tmp/build-contexts/
alpine/
Dockerfile # rendu depuis le template
build.json # manifest de build (tag, plateformes, etc.)
golang/
Dockerfile
build.json

Le manifest build.json contient :

{
"tag": "registry.example.com/bases/alpine:3.21.3-core1.0.0",
"platforms": ["linux/amd64", "linux/arm64"],
"labels": { "org.opencontainers.image.created": "..." }
}

Ce mode est conçu pour les environnements CI utilisant des builders rootless comme Kaniko ou Buildah qui requièrent le contexte de build sous forme de fichiers. Voir Images de base — GitLab CI pour un exemple complet.

Quand build.platforms contient plus d’une entrée, imglife utilise docker buildx build --push pour produire un manifest multi-arch. Un builder buildx avec le driver docker-container est requis.

build:
platforms: [linux/amd64, linux/arm64]
builder: imglife-builder

Créer le builder :

Terminal window
docker buildx create \
--name imglife-builder \
--driver docker-container \
--bootstrap

imglife passe ces valeurs via --label à docker build, ce qui alimente le config.Labels de l’image. Quand un builder buildx est configuré (build.builder), les mêmes valeurs sont aussi injectées comme annotations OCI manifest via --annotation, visibles avec docker buildx imagetools inspect. Pour les builds multi-plateforme, les annotations sont également ajoutées au niveau de l’image index.

Label / Annotation Valeur Condition
org.opencontainers.image.version Version de l’image produite toujours
org.opencontainers.image.base.name Référence complète de l’image miroir toujours
org.opencontainers.image.created Horodatage de build (RFC 3339) toujours
imglife.type Type d’image (core, spe, …) toujours
imglife.core-version Valeur de build.core_version toujours
org.opencontainers.image.base.digest Digest SHA256 de l’image miroir si résolvable
imglife.platforms Plateformes cibles (linux/amd64,…) si configurées
org.opencontainers.image.revision Variable d’env $IMGLIFE_REVISION si env var définie
org.opencontainers.image.source Variable d’env $IMGLIFE_SOURCE si env var définie
org.opencontainers.image.url Variable d’env $IMGLIFE_URL si env var définie

Ces labels sont consommés par imglife register pour la détection automatique de l’image de base et des plateformes.

Définir les variables optionnelles dans le job CI pour alimenter les labels de traçabilité :

# GitLab CI — job build-bases
variables:
IMGLIFE_REVISION: $CI_COMMIT_SHA # → org.opencontainers.image.revision
IMGLIFE_SOURCE: $CI_PROJECT_URL # → org.opencontainers.image.source
IMGLIFE_URL: $CI_PROJECT_URL/container_registry # → org.opencontainers.image.url

Après chaque exécution (pas en mode --list), imglife affiche un résumé sur stdout :

Build Summary · 12.1s
───────────────────────────────────
Base images in config 4
├─ Built 2
├─ Already exists 2
└─ Errors 0

En mode --dry-run, l’en-tête est préfixé par [dry-run]. Définir NO_COLOR=1 ou TERM=dumb pour désactiver les couleurs ANSI.

Code Signification
0 Toutes les images construites et poussées avec succès
1 Une ou plusieurs constructions ont échoué