Pr.
BENHADDI Meriem
Année universitaire :
Cours : DevOps et Cloud Computing 2025/2026
TP6 : GitLab et Docker : Création d’un Runner de type Docker
Dans ce TP, notre runner va tourner, non pas sur notre machine comme dans le TP précèdent,
mais sur une instance Docker, donc une VM extérieur à ma machine locale. Ceci permettra
d’isoler les ressources.
Documentation : [Link]
Qu'est-ce que Docker ?
Docker est une plateforme open-source de conteneurisation qui permet de créer, déployer et
exécuter des applications dans des environnements isolés et standardisés appelés conteneurs.
Avant Docker, le syndrome commun était : "Ça marche sur ma machine mais pas en
production". Docker résout ce problème en empaquetant l'application avec toutes ses
dépendances dans un environnement cohérent et portable.
L'Architecture Docker
Le Moteur Docker
Cœur du système, composé de trois éléments principaux :
- Le Démon Docker
Service en arrière-plan qui gère tous les conteneurs
Écoute les commandes via l'API Docker
Gère le cycle de vie des conteneurs
- Le Client Docker
Interface en ligne de commande pour interagir avec le Démon
Envoie des instructions au Démon via l'API
- L'API REST
Interface de programmation permettant la communication
Permet à des outils externes de contrôler Docker
Les Images Docker
Une image Docker est un modèle en lecture seule qui contient les instructions pour créer un
conteneur. C'est une sorte de "recette" ou de "patron" qui définit l'environnement d'exécution.
Caractéristiques Clés
Immuable : Une fois créée, une image ne change pas
Empilable : Composée de couches superposées
Versionnable : Peut être taguée avec différentes versions
Portable : Fonctionne de manière identique sur tout système supportant Docker
Sources des Images
Images de base : Systèmes d'exploitation minimalistes
Images officielles : Maintenues par les éditeurs de logiciels
Images personnalisées : Créées par les développeurs pour leurs besoins spécifiques
Les Conteneurs Docker
Un conteneur est une instance d'exécution d'une image Docker. C'est un processus isolé qui
s'exécute sur le système hôte, partageant le noyau mais ayant son propre système de fichiers
et son espace utilisateur.
Caractéristiques Principales
Isolation : Environnement séparé des autres conteneurs et de l'hôte
Éphémère : Peut être créé, démarré, arrêté et détruit rapidement
Portable : Fonctionne de manière identique partout
Léger : Partage le noyau du système hôte
Cycle de Vie
Création → Démarrage → Exécution → Arrêt → Destruction
Chapitre 5 : Les Registries Docker
Rôle et Importance
Les registries sont des dépôts qui stockent et distribuent les images Docker. Ils permettent le
partage et la réutilisation des images.
Types de Registries
Docker Hub : Registry public officiel avec des images officielles et communautaires
Registries privés : Solutions d'entreprise pour stocker des images propriétaires
Registries cloud : Services hébergés par les fournisseurs cloud
Fonctionnement
Les développeurs poussent leurs images vers le registry, et les systèmes de production les
tirent pour déployer les applications.
La Persistance des Données
Par défaut, les conteneurs sont éphémères - toutes les données sont perdues quand le
conteneur est supprimé.
Solutions de Stockage :
Volumes Docker
Gérés par Docker
Persistants et indépendants du cycle de vie des conteneurs
Meilleures performances
Mounts de liaison
Lien direct avec un répertoire spécifique de l'hôte
Utiles pour le développement
Stockage tmpfs
Stockage en mémoire vive
Idéal pour les données temporaires et sensibles
Chapitre 8 : Docker Compose
Rôle et Utilité
Outil pour définir et exécuter des applications multi-conteneurs. Permet de décrire l'ensemble
des services, réseaux et volumes dans un fichier de configuration.
Avantages
Orchestration simplifiée : Groupe plusieurs conteneurs liés
Configuration déclarative : Tout est défini dans un fichier
Reproductibilité : Même environnement sur toutes les machines
Gestion simplifiée : Commandes unifiées pour toute l'application
Cas d'Usage Typiques
Applications composées de plusieurs services comme une base de données, un backend API
et un frontend web.
Application
1- Installation de Docker
1.1. Télécharger et installer Docker Desktop Installer.
1.2. Vérifier l'installation
Sur l’invite de commande, taper la commande : docker ps
Résultat de la commande :
sur powershell :
docker --version
docker-compose –version
1.3. Test de fonctionnement
Une fois que Docker Desktop est démarré, testez avec :
powershell
# Télécharger une image test
docker pull hello-world
# Lancer un conteneur test
docker run hello-world
# Maintenant vérifier les conteneurs
docker ps -a
Vous devriez voir : (l’id et le port name peuvent changer)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago happy_mountain
Sur l’interface Docker, vous pouvez également vérifier qu’un nouveau container hello-world
a été ajouté.
--------------------
Tutoriel : [Link]
Sur windows créer un dossier web dans le disque C et remplacer la commande :
docker run –v ./web:/var/www/html –p 8080 :80 php :8.4.20-apache-trixie
Par la commande :
docker run –v /c/web:/var/www/html –p 8080 :80 php :8.4.20-apache-trixie
8.4.20-apache-trixie est la version apache php que j’utilise. Si vous utilisez une autre version,
adaptez la commande.
Application avec GitLab
1- Création d’un Runner Docker
Téléchargeons l'image officielle du GitLab Runner : docker pull gitlab/gitlab-runner:latest
a. Pull de l'image
powershell
docker pull gitlab/gitlab-runner:latest
b. Vérification du téléchargement
powershell
docker images | findstr "gitlab"
Vous devriez voir :
text
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-runner latest abc123def456 2 weeks ago 500MB
c. Test du runner en mode conteneur
powershell
docker run --rm -it gitlab/gitlab-runner:latest --version
d. Installation en conteneur
powershell
docker run -d --name gitlab-runner --restart always -v //var/run/[Link]:/var/run/docker.s
ock -v C:/GitLab-Runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest
e. Enregistrement (dans le conteneur)
powershell (changer la valeur du token par la votre)
docker exec -it gitlab-runner gitlab-runner register `
--url [Link] `
--registration-token GR1348941uoZDinxkX8v_HSzs2-14 `
--description "docker-runner" `
--tag-list "docker,windows" `
--executor docker `
--docker-image alpine:latest
Verifier sur la plate-forme [Link] que vous avez bien un nouveau runner docker.
Aller sur votre dossier : 'C:\GitLab-Runner', ouvrer le fichier de configuration [Link]
concurrent = 4
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "docker-runner"
url = "[Link]
token = "VOTRE_TOKEN"
executor = "docker"
[runners.custom_build_dir]
[[Link]]
[[Link].s3]
[[Link]]
[[Link]]
[[Link]]
tls_verify = false
image = "default"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["c:\\cache"]
shm_size = 0
2- Création de pipelines pour le Runner Docker
Cette étape est similaire à celle du TP précédent.
Reportez-vous à la même section du TP 5.
Seule différence : pour les stages remplacez les tags par docker