Skip to main content

Généralités | Docker

Docker 

Docker est une plateforme open-source pour développer, livrer et exécuter des applications dans des conteneurs.

Composants clés : Docker Engine (gère les conteneurs), Docker Images (modèles immuables avec code et dépendances), Docker Containers (instances exécutables), Docker Hub (registre public).

Conteneurisation des applications

Un container est une virtualisation légère qui isole une application et ses dépendances, en partageant le noyau de l'OS hôte. Docker a standardisé ce concept en 2013 et reste le runtime le plus répandu.

Un conteneur est un environnement de travail pour les services qui est, le plus souvent, isoler des autres. On peut cependant choisir de faire communiquer des conteneurs ensemble, selon les besoins. Chaque conteneur peut être relié aux autres par le biais de réseaux virtuels. Il est possible de monter des volumes sur machine hôte dans un conteneur. Le stockage et les ressources alloués à chaque conteneur sont gérés dynamiquement, contrairement à une VM.

Les conteneurs sont une méthode de virtualisation légère qui permet de regrouper une application et ses dépendances dans un environnement isolé. Contrairement aux machines virtuelles, qui virtualisent un système d'exploitation entier, les conteneurs partagent le noyau du système d'exploitation hôte, ce qui les rend plus légers et plus rapides à démarrer.

Avantages principaux : portabilité (exécutables sur tout système compatible), efficacité (moins de surcharge), isolation (améliore sécurité et stabilité), scalabilité (facile à mettre à l'échelle).

 

Différences conteneurs vs machines virtuelles

Caractéristique Conteneurs Machines virtuelles
Virtualisation Au niveau OS Au niveau matériel 
Performance Plus rapide à démarrer et exécuter Plus lent
Ressources Partage le noyau hôte, moins gourmand OS complet par VM, plus de ressources
Isolation Moins forte, mais suffisante souvent Plus forte
Portabilité Très portable Moins, dépend de l'hyperviseur

Les conteneurs conviennent aux microservices et déploiements rapides ; les VM aux OS complets ou isolation maximale.

 

Fonctionnement

Pour que les applications fonctionnent correctement, les conteneurs doivent disposer des éléments  nécessaires (code, dépendance, ...). Cependant, pour faire fonctionner le tout avec le minimum de ressources, les conteneurs regroupent leurs contenus. En effet, il est possible de faire fonctionner plusieurs conteneurs sur la même machine qui vont alors partager le noyau de l'OS même s'ils continueront de travailler fondamentalement séparément (au niveau des processus exécutés par exemple).

Cela permet un gain de stockage et de ressources physiques sur les hôtes qui accueillent les conteneurs.

Du code à l'image : Dockerfile  →  docker build  →  Image  →  docker run  →  Container

  • Le Dockerfile liste les instructions de construction de l'image
  • docker build -t tag:version -f chemin/Dockerfile . — construit l'image
  • docker run nginx — lance un container depuis une image
  • docker push / pull — échange avec une registry (Docker Hub, GitLab Registry, Artifactory…)

Concepts essentiels du cycle de vie

Notion Description
Image layers Chaque instruction du Dockerfile crée une couche immuable mise en cache CESI-MICSI-2026-DEVOPS-DAY-1.pdf
Réseau / Bridge -p portHost:portContainer pour exposer un port depuis l'hôte CESI-MICSI-2026-DEVOPS-DAY-1.pdf
Volumes Persistance des données hors du cycle de vie du container (/var/lib/docker/volumes) CESI-MICSI-2026-DEVOPS-DAY-1.pdf
Docker Compose Fichier YAML pour orchestrer plusieurs containers d'une même stack (frontend, backend, BDD) CESI-MICSI-2026-DEVOPS-DAY-1.pdf

Bonnes pratiques image

  • Utiliser des images de base officielles et à jour (préférer alpine : ~6 Mo vs python:latest : ~918 Mo)
  • Ne jamais stocker de secrets en dur dans l'image
  • Scanner régulièrement les vulnérabilités avec Trivy
  • Utiliser les multi-stage builds pour réduire la taille de l'image finale

Portainer

Docker est un système qui permet de faire tourner du code et ses dépendances dans des conteneurs, ceux-ci permettent de faire fonctionner des services / application et rien d'autre que ce dont ils ont besoin pour fonctionner.

Portainer est une extension a Docker qui n'est doncpas nécessaire au bon fonctionnement du service. Elle s'avère utile pour plus de confort puisqu'elle permet un accès à Docker via une interface web