Introduction
TIDE ouvre deux ateliers d’artistes aux visiteurs pendant une journée. Son site propose un programme, un itinéraire et un guide téléchargeable. Le site City est public et la prévisualisation de référence Riverside fonctionne encore. Le conteneur de prévisualisation Courtyard a disparu. Restaurez ce lieu sans remplacer les sites voisins ni les réseaux partagés.
Vous devez connaître les bases du terminal et avoir utilisé les images, conteneurs et ports publiés Docker. Terraform est présenté ici : configuration HCL, fournisseurs, ressources, sources de données, plans et état. Les outils et les images complètes du site sont fournis. Il s’agit de Docker local sur une seule instance de formation, sans compte cloud ni programmation applicative.
Utilisez Live Studios, Reference Preview, Venue Preview et Workstation. Venue Preview est indisponible avant la restauration. Cet environnement démarre indépendamment. Terraform 1.14.3 et le fournisseur communautaire kreuzwerker/docker 3.0.2 sont fixés pour cet exercice. Un miroir local du fournisseur rend l’initialisation indépendante du registre public pendant le travail.
Déclarer la prévisualisation et son périmètre de propriété
Dans cette étape, vous utiliserez le parcours normal du visiteur puis déclarerez uniquement le conteneur manquant. Commencez dans Live Studios. La page d’accueil affiche LIVE PROGRAMME / City. Sélectionnez Meet the two studios, lisez les séances Form & Field et Small Editions, puis choisissez Find directions and the programme. Cliquez sur Download the day programme et ouvrez le texte téléchargé : il doit contenir City et les horaires des deux ateliers. Dépliez Do I need to book? : l’entrée est gratuite et sans réservation.
Passez à Reference Preview. Le même parcours affiche REFERENCE PREVIEW / Riverside. Conservez ce conteneur : il appartient à cette configuration Terraform et reste nécessaire. Venue Preview ne peut pas se connecter, car son conteneur manque. Un serveur absent diffère d’un HTTP 404 : ce dernier vient d’un serveur actif qui ne trouve pas une page donnée.
Lire la racine et l’état
Passez à Workstation. Une racine Terraform est le répertoire dont les fichiers .tf sont évalués ensemble. Exécuter Terraform ailleurs sélectionne une autre racine ; les répertoires voisins ne sont pas parcourus automatiquement. pwd affiche votre chemin actuel :
pwd
/home/labex/project/preview/courtyard
ls énumère les fichiers et cat affiche un fichier texte. Lisez la configuration préparée :
ls
cat main.tf
Un fichier .tf utilise HCL, un langage de configuration. Les blocs regroupent les paramètres entre accolades ; name = value attribue une valeur. Le texte entre guillemets est une chaîne ; les ports sont des nombres sans guillemets. Le bloc terraform fixe le programme et le fournisseur requis. Un fournisseur est un plugin qui traduit les opérations Terraform en requêtes API Docker. provider "docker" {} utilise le daemon Docker de cette instance, sans connexion à un cloud public.
Les deux blocs data "docker_network" lisent des réseaux existants. Une source de données consulte un objet sans prendre en charge sa création ou sa suppression. city et venue sont des étiquettes locales utilisées dans les références. Les noms de réseaux identifient les objets Docker réels. Les sources d’images lisent de même les identifiants préparés. Utiliser un véritable ID évite de considérer continuellement une étiquette et son ID résolu comme deux images différentes.
cat reference.tf
Une ressource déclare un objet géré par cette racine. docker_container.reference est une adresse Terraform combinant le type de ressource et l’étiquette locale. Son nom Docker est tide-reference. Le conteneur sert le port 80 en interne et le publie sur le port 8083 de l’instance. L’expression data.docker_image.reference.id lit l’attribut id de la source d’image. C’est une expression, donc elle n’est pas entre guillemets.
Ne modifiez pas main.tf ni reference.tf. Les deux réseaux, tous les enregistrements d’images et le conteneur public sont hors de la propriété gérée par cette racine. Celle-ci gère deux conteneurs : la référence et la prévisualisation absente.
L’état associe les adresses Terraform aux identifiants réels. Le fichier préparé terraform.tfstate mémorise les deux conteneurs, y compris celui qui manque désormais. L’état n’est ni la configuration ni une sauvegarde du site. Ne l’éditez pas et ne le supprimez pas. Un plan ultérieur demande à Docker ce qui existe vraiment au lieu de se fier au seul ID mémorisé.
Écrire la déclaration de la ressource manquante
Créez preview.tf. Terraform le combine avec les autres fichiers .tf de cette racine ; le nom de fichier ne crée pas un environnement séparé. cat > preview.tf remplace seulement ce fichier. Le délimiteur entre guillemets HCL commence un here-document : collez le bloc entier, y compris le dernier HCL seul sur sa ligne. Les guillemets conservent le contenu littéral.
cat > preview.tf <<'HCL'
resource "docker_container" "preview" {
name = "tide-preview"
image = data.docker_image.site.id
ports {
internal = 80
external = 8082
}
networks_advanced {
name = data.docker_network.venue.name
}
}
HCL
Cela déclare un conteneur issu de l’image complète Courtyard. Le bloc imbriqué ports publie HTTP ; networks_advanced le relie au réseau existant du lieu. Le site public utilise 8081 et la référence 8083 : 8082 évite donc un conflit. Référencer un réseau n’en fait pas une ressource gérée.
Initialisez cette racine. init prépare le plugin du fournisseur ; il ne crée pas d’infrastructure :
terraform init
Attendez-vous à Terraform has been successfully initialized!. Le miroir local fournit la version 3.0.2. .terraform contient le fournisseur initialisé et .terraform.lock.hcl enregistre le choix et les sommes de contrôle. Conservez le verrou avec la configuration. terraform state list affiche les adresses mémorisées :
terraform state list
La sortie contient docker_container.preview et docker_container.reference, ainsi que les sources d’images et de réseaux. La présence d’une adresse ne prouve pas que son conteneur existe encore.
fmt met en forme les espaces HCL ; validate contrôle la syntaxe et les types d’arguments du fournisseur. Aucun ne prouve que le site fonctionne :
terraform fmt
terraform validate
Attendez-vous à Success! The configuration is valid.. En cas d’erreur de syntaxe, lisez le nom de fichier et la ligne, comparez preview.tf au bloc complet ci-dessus, corrigez puis relancez fmt et validate. Ne supprimez pas l’état et ne réécrivez pas la configuration partagée pour effacer une erreur. Votre déclaration peut maintenant recréer la cible sans modifier la référence.
Examiner et appliquer une restauration précise
Dans cette étape, vous distinguerez l’état mémorisé de l’infrastructure réelle, restaurerez tout le parcours Courtyard et confirmerez qu’aucun autre objet ne change. Commencez dans Workstation, dans la même racine.
Prévisualiser avant de modifier
terraform plan actualise sa connaissance en lisant Docker, compare cette réalité à la déclaration et propose des changements. -out=recovery.tfplan enregistre la proposition dans un plan binaire pour qu’apply exécute le plan examiné. Un plan peut contenir une configuration sensible ; cet exercice n’a aucun identifiant secret. Gardez-le dans le répertoire du projet.
terraform plan -out=recovery.tfplan
Repérez l’actualisation de l’ID mémorisé, puis :
## docker_container.preview will be created
...
Plan: 1 to add, 0 to change, 0 to destroy.
Le + signifie création. ~ indiquerait une mise à jour sur place ; -, une destruction ; -/+, un remplacement. La prévisualisation manquante exige une seule création. La référence ne doit avoir aucun changement proposé. Aucun réseau ne doit être créé, remplacé ou détruit : ce sont des sources de données partagées existantes, pas des ressources possédées ici.
En cas de destruction, remplacement ou autre ressource, arrêtez-vous avant d’appliquer. Contrôlez pwd, preview.tf et une éventuelle modification accidentelle de reference.tf. Corrigez seulement votre erreur à partir de l’exemple et créez un nouveau plan. Un nom de réseau incorrect peut donner network not found ; comparez-le aux blocs data existants plutôt que de créer un réseau de substitution. Ne supprimez pas les conteneurs par préfixe et n’utilisez pas terraform destroy comme raccourci de restauration.
Exécuter le plan examiné
terraform apply recovery.tfplan exécute les changements enregistrés. Contrairement à apply sans nom de plan, il ne demande pas un nouveau yes ; enregistrer un plan ne vaut pas autorisation de l’exécuter. Examinez-le donc avant cette commande :
terraform apply recovery.tfplan
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Si Terraform annonce un plan périmé, une autre opération a changé l’état depuis sa création. Générez et examinez un nouveau plan avant de l’appliquer. Si le port 8082 est déjà attribué, inspectez le conteneur précis en conflit au lieu de tout supprimer. Il doit être libre dans cet environnement préparé ; revérifiez le port externe et préservez 8081 et 8083.
Passez à Venue Preview. Rechargez après le démarrage du conteneur. La page doit afficher VENUE PREVIEW / Courtyard. Suivez Meet the two studios → Find directions and the programme → Download the day programme. Ouvrez le téléchargement et confirmez Courtyard et les deux horaires de démonstration. Pages, styles, illustration et téléchargement complets viennent de l’image fournie, pas d’une nouvelle page d’accueil Nginx vide.
Passez à Live Studios et Reference Preview. Les parcours d’origine doivent toujours fonctionner avec City et Riverside. Des noms différents sur une page d’accueil ne prouvent pas la conservation : les objets sous-jacents doivent rester les mêmes.
Confirmer la convergence et la conservation
Revenez à Workstation. Un second plan observe à nouveau la déclaration actuelle et Docker :
terraform plan
No changes. Your infrastructure matches the configuration.
C’est la convergence : les ressources souhaitées existent avec les réglages déclarés. Terraform ne surveille et ne répare pas continuellement les conteneurs ; une personne ou une automatisation doit relancer le processus après un changement ultérieur. Cette restauration rétablit une infrastructure remplaçable et le contenu fourni, pas les données utilisateur perdues ni un hôte entier.
terraform state show affiche les attributs mémorisés d’une ressource. Comparez son id à l’identifiant Docker réel. L’option Docker --format sélectionne un champ ; les apostrophes gardent le modèle littéral :
terraform state show docker_container.preview
docker inspect --format '{{.Id}}' tide-preview
Les deux doivent désigner le même nouveau conteneur. L’ID varie : ne copiez pas un exemple dans l’état. Lisez les voisins d’origine et les deux réseaux existants sans les changer :
docker inspect --format '{{.Name}} {{.Id}} {{.State.StartedAt}}' tide-live tide-reference
docker network inspect --format '{{.Name}} {{.Id}}' tide-city tide-courtyard
Le cours compare ces identités aux valeurs d’origine. Le conteneur public est hors de cette racine, tandis que la référence est une ressource gérée qui y est volontairement conservée. Les deux frontières comptent. Vous avez restauré une prévisualisation manquante tout en préservant les autres sites et l’infrastructure partagée.
Résumé
Vous avez utilisé HCL et un fournisseur Docker fixé pour déclarer le conteneur manquant. Les sources de données ont laissé réseaux et images partagés hors de la propriété gérée par cette racine. Vous avez comparé configuration, état et objets réels, appliqué une création examinée, vérifié tout le parcours visiteur et obtenu un plan sans changement en préservant les sites public et de référence.



