Université de Sousse
Institut Supérieur des Sciences Appliquées et de Technologie de Sousse
Chapitre 3 : De la Conteneurisation à l’Orchestration avec
Kubernetes
LSI A03
Responsable: Dr Manel MAJDOUB
Année universitaire: 2025-2026
La conteneurisation
Les conteneurs sont une technologie de virtualisation au niveau du système d'exploitation (OS-level
virtualization) qui permet aux développeurs de packager des applications et leurs dépendances en un seul
paquet portable qui peut être exécuté sur n'importe quelle machine ou plateforme prenant en charge les
conteneurs.
Un conteneur Linux est un processus ou un ensemble de processus isolés du reste du système, tout en étant
légers.
Le conteneur permet de faire de la virtualisation légère, c'est-à-dire qu'il ne virtualise pas les ressources, il ne crée
qu'une isolation des processus.
Le conteneur partage les ressources avec le système hôte.
Machine virtuelle Conteneur 2
VM vs Conteneur Docker
VM Conteneur Docker
Isolation totale avec l’OS hôte et les autres Isolation se fait uniquement au niveau
OS applications et dépendances
Exécute un OS complet ( kernel inclus) Exécute uniquement les services
donc plus de ressources système (CPU, nécessaires pour l’application qu’il
mémoire,...) contient
OS hôte et invité indépendants Même version d’OS hôte
3
Docker
Docker est une plateforme logicielle qui permet de créer, de déployer et de gérer des applications dans des
conteneurs logiciels.
Les conteneurs Docker sont des environnements isolés et légers qui contiennent tout le nécessaire pour exécuter
une application, y compris le code, les dépendances et les bibliothèques.
Les avantages de Docker sont nombreux:
Docker permet de créer des environnements de développement et de production identiques, ce qui facilite la
mise en production des applications.
Les conteneurs Docker sont portables, ce qui signifie qu'ils peuvent être exécutés sur n'importe quel système
d'exploitation et sur n'importe quelle plateforme de cloud.
Docker permet de faciliter la gestion des applications en automatisant certaines tâches telles que la création,
la mise à jour et la suppression de conteneurs.
4
Docker
Docker s’appuie sur deux fonctionnalités essentielles de Linux pour assurer l’isolation et la gestion des ressources :
les namespaces et les cgroups.
Chaque conteneur utilise ses propres namespaces, ce qui lui permet d’avoir des processus, un réseau, un
système de fichiers, des ressources IPC et même un hostname séparés du reste du système. Cette isolation
garantit que chaque conteneur fonctionne comme un environnement indépendant sur la même machine.
Control groups (cgroups) permet de limiter l’accès aux ressources à des processus. Grâce à cela, Docker
partage les ressources système disponibles entre tous les conteneurs (RAM, CPU, accès réseau et lecture /
écriture disque etc).
5
Docker
Pour utiliser Docker, il faut:
installer le logiciel Docker sur son ordinateur.
créer une image Docker en écrivant un Dockerfile, qui contient les instructions pour construire l'image.
lancer un conteneur en utilisant cette image.
Il est également possible de publier des images Docker sur des registres publics ou privés, tels que Docker Hub,
pour faciliter le partage et la collaboration entre développeurs.
6
Le cycle de vie d'un conteneur
7
La syntaxe du Dockerfile
Un Dockerfile est un fichier texte qui définit une suite d’instructions qui vont permettre d’installer tous les
éléments nécessaires à l’exécution de notre application.
Il existe des dizaines d'instructions pour les Dockerfiles.
FROM: Définit l’image de base qui sera utilisée par les instructions suivantes.
LABEL: Ajoute des métadonnées à l’image avec un système de clés-valeurs, permet par exemple d’indiquer à
l’utilisateur l’auteur du Dockerfile.
ARG: Variables temporaires qu’on peut utiliser dans un Dockerfile.
ENV: Variables d’environnement utilisables dans votre Dockerfile et conteneur.
RUN: Exécute des commandes Linux ou Windows lors de la création de l’image. Chaque instruction RUN va créer
une couche en cache qui sera réutilisée dans le cas de modification ultérieure du Dockerfile.
8
La syntaxe du Dockerfile
COPY: Permet de copier des fichiers depuis notre machine locale vers le conteneur Docker.
ADD: Même chose que COPY mais prend en charge des liens ou des archives (si le format est reconnu, alors il sera
décompressé à la volée).
ENTRYPOINT: comme son nom l’indique, c’est le point d’entrée de votre conteneur, en d’autres termes, c’est la
commande qui sera toujours exécutée au démarrage du conteneur.
CMD: Spécifie les arguments qui seront envoyés au ENTRYPOINT, (on peut aussi l’utiliser pour lancer des
commandes par défaut lors du démarrage d’un conteneur). S’il est utilisé pour fournir des arguments par défaut
pour l’instruction ENTRYPOINT, alors les instructions CMD et ENTRYPOINT doivent être spécifiées au format de
tableau JSON.
WORKDIR: Définit le répertoire de travail qui sera utilisé pour le lancement des commandes CMD et/ou
ENTRYPOINT et ça sera aussi le dossier courant lors du démarrage du conteneur.
EXPOSE: Expose un port.
9
Un exemple de fichier Dockerfile
Créez un fichier nommé « Dockerfile » dans votre répertoire de travail.
# Utiliser une image Ubuntu officielle
FROM ubuntu:latest
# Installer Nginx (meilleure pratique : tout dans une seule couche)
RUN apt-get update && \
apt-get install -y nginx && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Copier la page HTML personnalisée dans le répertoire web de Nginx
COPY [Link] /var/www/html/[Link]
# Exposer le port HTTP
EXPOSE 80
# Lancer nginx au premier plan
CMD ["nginx", "-g", "daemon off;"]
Build l’image : docker build -t mon-nginx .
Lancer le conteneur: docker run -p 8080:80 mon-nginx
10
Docker CLI
Suivre les logs d’un conteneur spécifique: $ docker container logs -f [container-name|container-id]
Lister les conteneurs actifs (en cours d’exécution): $ docker container ps
Lister tous les conteneurs: $ docker container ps -a
Arrêter un conteneur: $ docker container stop [container-name|container-id]
Supprimer un conteneur: $ docker container rm [container-name|container-id]
Lister les images: $ docker images
Supprimer une image du local registry: $ docker rmi <image-name>[:tag]
Tagger une image: $ docker image tag <image-name> <new-image-name>
11
Orchestration de conteneurs
L’orchestration consiste à automatiser la création et la répartition des conteneurs à travers un cluster de serveurs.
Cela peut permettre de :
déployer de nouvelles versions d’une application progressivement.
faire grandir la quantité d’instances de chaque application facilement.
auto-scaling automatiquement en fonction de la demande.
Exemples d’orchestrateurs:
docker-compose: surcouche à Docker, simple (mise en place et appréhension), capacités assez limitées
Docker Swarm: gestion de cluster de machines, scaling, intégré à Docker. Swarm est l'outil de clustering et
d’orchestration natif de Docker (développé par Docker Inc.). Il s’intègre très bien avec les autres commandes
docker.
Mesos/Marathon/DCOS: gestion de (très gros) clusters de machines, scaling, gestion fine des ressources,
templates et bibliothèques de déploiement
12
Kubernetes (k8s): nombreuses fonctionnalités (clusters, scaling, templates, ressources, stockage), templates
Kubernetes
Kubernetes (aussi connu sous le nom de K8s) est un système open source de gestion d'orchestration de
conteneurs, développé à l'origine par Google.
Le projet a été lancé en 2014 sous le nom de "Project Seven of Nine" avant d'être rebaptisé Kubernetes.
L’objectif de Kubernetes est d’automatiser le déploiement, la mise à l'échelle et la gestion d'applications
conteneurisées.
Kubernetes fournit un ensemble d'outils pour gérer et coordonner la création, la mise à l'échelle et la surveillance
des conteneurs.
Il permet également la gestion des ressources, la tolérance aux pannes et la mise à jour des applications sans
interruption de service.
Depuis son lancement, Kubernetes est devenu une technologie de choix pour de nombreuses entreprises
cherchant à déployer des applications dans des environnements de conteneurs.
Il est soutenu par une grande communauté de développeurs et d'entreprises, notamment Google, Microsoft,
Amazon, Red Hat et bien d'autres.
13
Architecture de kubernetes
14
01/11/2025 1
Architecture de kubernetes
Master Node : est le cerveau de la plateforme Kubernetes. Il gère les tâches d'orchestration et prend les décisions
nécessaires pour maintenir l'état désiré du cluster. Le Master Node est composé de :
API Server : expose l'API Kubernetes qui est utilisée pour gérer les ressources du cluster.
Etcd : est la base de données distribuée utilisée pour stocker l'état du cluster.
Controller Manager : surveille l'état du cluster et prend des mesures pour le maintenir dans l'état souhaité.
Scheduler : est responsable de l'ordonnancement des pods sur les nœuds du cluster en fonction des besoins
de l'application.
15
01/11/2025 1
Architecture de kubernetes
Node : est une machine physique ou virtuelle qui exécute des conteneurs. Chaque nœud dans le cluster doit
exécuter un agent de nœud appelé kubelet qui communique avec le Master Node.
Kubelet : est responsable de l'exécution des conteneurs et de la communication avec le Master Node.
Kube-proxy : est responsable de la gestion du trafic réseau entre les pods et les services.
Container Runtime : est le moteur de conteneurisation utilisé pour exécuter les conteneurs.
16
01/11/2025 1
Création d’un pod
1. Création de l'application : Développer le code de l’application.
2. Création du Dockerfile : Écrire un Dockerfile pour définir l’environnement et les dépendances de votre application.
3. Construction et étiquetage de l’image Docker : Construire l’image Docker à partir du Dockerfile et lui attribuer un
tag.
4. Connexion à Docker Hub : S’authentifier auprès de Docker Hub.
5. Pousser l’image vers Docker Hub : Envoyer l’image Docker construite vers votre dépôt Docker Hub.
6. Création du Pod via un Deployment : Créer un fichier [Link] qui définit le Pod et les paramètres du
Deployment.
7. Pull (récupération) de l’image depuis Docker Hub : Kubernetes récupère automatiquement l’image Docker depuis
Docker Hub lors de la création du Pod.
17
01/11/2025 1
Les principaux objets Kubernetes
Pods : un Pod est la plus petite unité déployable de Kubernetes. Un Pod est un groupe de un ou plusieurs
conteneurs qui partagent un espace de stockage, une adresse IP et un espace de noms réseau.
Deployment : un objet Deployment permet de créer et de gérer des réplicas de Pods (un groupe de un ou
plusieurs conteneurs) pour fournir une haute disponibilité pour une application. Les Deployments permettent
également de gérer les mises à jour de l'application en créant de nouvelles versions de l'application.
ConfigMap : un ConfigMap est un objet Kubernetes qui stocke les données de configuration sous forme de paires
clé-valeur. Les ConfigMaps peuvent être utilisés pour stocker les variables d'environnement, les fichiers de
configuration et les paramètres de configuration pour les applications déployées dans Kubernetes.
18
Les principaux objets Kubernetes
Un DaemonSet permet d’exécuter automatiquement une copie d’un même Pod sur chaque nœud d’un cluster
Kubernetes. Il garantit ainsi la présence continue de services essentiels comme la collecte de logs, la surveillance
du réseau, le provisionnement du stockage.
Secret : est un objet Kubernetes qui stocke des données sensibles, telles que des informations d'identification, des
clés d'API ou des certificats SSL/TLS, sous forme de paires clé-valeur chiffrées.
Volumes : est un espace de stockage qui peut être monté sur un conteneur. Les Volumes Kubernetes peuvent être
utilisés pour stocker des données en mode persistant et pour permettre la communication entre les conteneurs.
Namespaces : est un objet Kubernetes qui permet de segmenter un cluster Kubernetes en plusieurs zones
logiques isolées. Les Namespaces permettent de regrouper des ressources Kubernetes en fonction de leur
utilisation ou de leur application, ce qui facilite la gestion des ressources et des autorisations d'accès.
19