TP 1 : Provider Docker de Terraform
Objectif
Section intitulée « Objectif »Découvrir le provider Docker de Terraform pour gérer des images, conteneurs, réseaux et volumes.
Ce TP permet de voir comment :
- configurer le provider
kreuzwerker/docker - télécharger une image Docker
- déployer un conteneur avec exposition de port
- créer un réseau Docker
- monter un volume dans un conteneur
Prérequis
Section intitulée « Prérequis »- Terraform installé
- Docker installé et lancé
terraform versiondocker versionPréparer l’environnement Terraform
Section intitulée « Préparer l’environnement Terraform »Créez un répertoire pour votre projet :
mkdir terraform-docker-tpcd terraform-docker-tpCréez un fichier main.tf avec le provider Docker :
terraform { required_providers { docker = { source = "kreuzwerker/docker" version = "~> 3.0" } }
required_version = ">= 1.5.0"}
provider "docker" {}Gérer les images Docker
Section intitulée « Gérer les images Docker »Ajoutez une ressource pour télécharger une image Docker :
resource "docker_image" "nginx_image" { name = "nginx:stable" keep_locally = true}Initialisez et appliquez :
terraform initterraform applydocker imagesCréer un conteneur
Section intitulée « Créer un conteneur »resource "docker_container" "nginx_container" { image = docker_image.nginx_image.name name = "nginx-container" ports { internal = 80 external = 8080 }}Appliquez et vérifiez :
terraform applydocker pscurl http://localhost:8080Ajouter un réseau Docker
Section intitulée « Ajouter un réseau Docker »resource "docker_network" "custom_network" { name = "custom-network"}Connectez le conteneur au réseau :
Note :
.latestest déprécié depuis la v3 du providerkreuzwerker/docker. Utiliser.image_id.
resource "docker_container" "nginx_container" { name = "nginx-container" image = docker_image.nginx_image.image_id
ports { internal = 80 external = 8080 }
networks_advanced { name = docker_network.custom_network.name }}Appliquez et vérifiez :
terraform applydocker network lsdocker network inspect custom-networkCréer un volume Docker
Section intitulée « Créer un volume Docker »resource "docker_volume" "nginx_volume" { name = "nginx-data"}Montez le volume dans le conteneur :
resource "docker_container" "nginx_container" { name = "nginx-container" image = docker_image.nginx_image.image_id
ports { internal = 80 external = 8080 }
networks_advanced { name = docker_network.custom_network.name }
volumes { container_path = "/usr/share/nginx/html" volume_name = docker_volume.nginx_volume.name }}Pour Windows :
resource "docker_container" "nginx_container" { name = "nginx-container" image = docker_image.nginx_image.image_id
ports { internal = 80 external = 8080 }
networks_advanced { name = docker_network.custom_network.name }
mounts { source = "C:/docker-data/nginx" target = "/usr/share/nginx/html" type = "bind" }}Appliquez et testez la persistance :
terraform applydocker volume lsdocker volume inspect nginx-dataecho "Hello Terraform!" > /var/lib/docker/volumes/nginx-data/_data/index.htmlcurl http://localhost:8080Supprimer les ressources
Section intitulée « Supprimer les ressources »terraform destroy