DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesInfrastructure as Code : premiers pas avec Terraform06 - Projet Capstone : Créer et gérer une infrastructure Docker avec Terraform

Détails

  • 40 minutes
  • Intermédiaire

Objectifs

  • Initialiser et configurer le provider Docker Terraform
  • Créer des ressources avec la syntaxe HCL
  • Maîtriser le workflow init → plan → apply → destroy
  • Utiliser les outputs pour exposer les informations de l'infrastructure
Module Infrastructure as Code : premiers pas avec Terraform

Exercice 06 : Projet Capstone - Créer et Gérer une Infrastructure Docker avec Terraform

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Configurer le provider Docker dans Terraform
  • ✅ Décrire une infrastructure en HCL (resource, variable, output)
  • ✅ Exécuter le workflow complet : init → plan → apply → destroy
  • ✅ Lire et interpréter le state Terraform
  • ✅ Modifier l'infrastructure et observer les changements

Durée estimée : 40 minutes

Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)

Prérequis :

  • Terraform installé (terraform version)
  • Docker installé et démarré
  • Module Terraform Débutant complété

📖 Contexte

Vous allez créer votre première infrastructure "as code" avec Terraform, en utilisant le provider Docker (idéal pour apprendre sans cloud payant). Vous gérerez des conteneurs Docker comme des ressources Terraform, et découvrirez comment Terraform calcule et applique les changements.


📋 Énoncé

Créez une infrastructure Docker complète avec Terraform : images, réseaux, conteneurs, et outputs. Puis modifiez et détruisez cette infrastructure.


🧭 Déroulement de l'exercice

Tâche 1 : Initialiser le projet Terraform

Créez un dossier terraform-docker/ et créez les fichiers main.tf, variables.tf, et outputs.tf. Dans main.tf, déclarez le required provider Docker avec sa version et la source kreuzwerker/docker.

Indice :

`hcl

terraform {

required_providers {

docker = {

source = "kreuzwerker/docker"

version = "~> 3.0"

}

}

}

>

provider "docker" {}

`

Exécutez terraform init pour télécharger le provider.

Vérification : terraform init réussit et crée un dossier .terraform/. terraform version affiche la version de Terraform et du provider Docker.


Tâche 2 : Déclarer des variables

Dans variables.tf, déclarez 3 variables :

  • app_name (string, default: "mon-app")
  • nginx_version (string, default: "1.25-alpine")
  • http_port (number, default: 8080)

Indice :

`hcl

variable "app_name" {

description = "Nom de l'application"

type = string

default = "mon-app"

}

`

Les variables permettent de paramétrer l'infrastructure sans modifier le code HCL principal.

Vérification : terraform console permet de taper var.app_name et voir la valeur par défaut.


Tâche 3 : Créer le réseau et l'image Docker

Dans main.tf, ajoutez deux ressources Terraform :

  1. docker_network nommé avec var.app_name
  2. docker_image pour nginx:${var.nginx_version}

Indice :

`hcl

resource "docker_network" "app_network" {

name = "${var.app_name}-network"

}

>

resource "docker_image" "nginx" {

name = "nginx:${var.nginx_version}"

}

`

terraform plan affiche les ressources qui seraient créées.

Vérification : terraform plan affiche 2 to add, 0 to change, 0 to destroy.


Tâche 4 : Créer le conteneur et appliquer

Ajoutez une ressource docker_container dans main.tf qui utilise l'image déclarée, se connecte au réseau, et mappe var.http_port sur le port 80. Appliquez l'infrastructure.

Indice :

`hcl

resource "docker_container" "web" {

name = var.app_name

image = docker_image.nginx.image_id

>

ports {

internal = 80

external = var.http_port

}

>

networks_advanced {

name = docker_network.app_network.name

}

}

`

docker_image.nginx.image_id référence l'attribut image_id de la ressource image créée.

Vérification : terraform apply réussit. docker ps affiche le conteneur mon-app. curl http://localhost:8080 retourne du HTML Nginx.


Tâche 5 : Définir les outputs et lire le state

Dans outputs.tf, déclarez des outputs pour le nom du conteneur, son ID, et l'IP du réseau.

Indice :

`hcl

output "container_name" {

value = docker_container.web.name

}

output "container_id" {

value = docker_container.web.id

}

`

terraform output affiche les valeurs. terraform show affiche le state complet. terraform state list liste les ressources gérées.

Vérification : terraform output container_name retourne mon-app. terraform state list liste les 3 ressources.


Tâche 6 : Modifier l'infrastructure et détruire

Changez la variable http_port à 9090 via un fichier terraform.tfvars. Relancez plan pour voir le changement planifié, puis apply. Enfin, détruisez toute l'infrastructure.

Indice : Créez terraform.tfvars avec http_port = 9090. terraform plan doit afficher que le port va changer. Certains changements forcent la recréation du conteneur (forces replacement). terraform destroy supprime toutes les ressources.

Vérification : Après apply, curl http://localhost:9090 fonctionne. Après destroy, docker ps ne liste plus le conteneur.


🗂️ Mini-Projet : Infrastructure Docker complète en HCL

Arborescence du projet :

terraform-docker/
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvars
└── .terraform/        ← généré par terraform init
    └── ...

Workflow complet :

bash
cd terraform-docker/

# Initialiser
terraform init

# Valider la syntaxe
terraform validate

# Prévisualiser
terraform plan

# Appliquer
terraform apply -auto-approve

# Vérifier
terraform output
terraform state list
docker ps

# Tester
curl http://localhost:8080

# Modifier le port
echo 'http_port = 9090' > terraform.tfvars
terraform plan
terraform apply -auto-approve
curl http://localhost:9090

# Nettoyer
terraform destroy -auto-approve
docker ps  # → vide

Checkpoints de validation :

  • terraform init télécharge le provider kreuzwerker/docker
  • terraform plan affiche 3 to add avant le premier apply
  • terraform apply crée le réseau, l'image et le conteneur Docker
  • curl http://localhost:8080 retourne du HTML Nginx
  • terraform output affiche le nom et l'ID du conteneur
  • terraform state list liste 3 ressources gérées
  • terraform destroy supprime toutes les ressources

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Initialiser le projet Terraform
  • Tâche 2 : Déclarer des variables
  • Tâche 3 : Créer le réseau et l'image Docker
  • Tâche 4 : Créer le conteneur et appliquer
  • Tâche 5 : Définir les outputs et lire le state
  • Tâche 6 : Modifier l'infrastructure et détruire
  • 🗂️ Mini-Projet : Infrastructure Docker complète en HCL