Retour au cours

introduction à docker : concepts, images et conteneurs

Objectifs

  • Comprendre le problème que Docker résout (“ça marche sur ma machine”).
  • Distinguer clairement une image d’un conteneur.
  • Lancer, lister et arrêter un conteneur simple avec les commandes de base.
  • Comprendre le rôle d’un registre comme Docker Hub.

La Conteneurisation : “Ça marche partout”

Le principal problème du développement logiciel a longtemps été la différence d’environnements. Un code qui fonctionne sur l’ordinateur d’un développeur (avec sa version de Python, ses librairies spécifiques) peut échouer en production où l’environnement est différent.

Docker résout ce problème en permettant d’empaqueter une application et toutes ses dépendances (code, librairies, variables d’environnement, fichiers système) dans une unité standardisée et portable : le conteneur.

Concepts Fondamentaux

Image

Une image est un modèle, un “plan” en lecture seule. Elle contient tout ce dont l’application a besoin pour s’exécuter.

  • Elle est construite en couches. Chaque instruction dans un Dockerfile (voir leçon suivante) crée une nouvelle couche.
  • Les images sont stockées et partagées via un registre. Le plus connu est Docker Hub.

Conteneur

Un conteneur est une instance en cours d’exécution d’une image. C’est un processus léger et isolé.

  • Vous pouvez lancer des dizaines de conteneurs à partir de la même image.
  • Chaque conteneur a son propre système de fichiers, son propre réseau et ses propres processus, isolés de l’hôte et des autres conteneurs.

Analogie : L’image est la recette d’un gâteau. Le conteneur est le gâteau que vous avez réellement préparé et que vous pouvez manger.

Registre

Un registre est un dépôt centralisé où sont stockées les images.

  • Docker Hub est le registre public par défaut.
  • Des entreprises peuvent avoir des registres privés (ex: GitHub Container Registry, AWS ECR).

Commandes de base à connaître

  • docker pull <nom_image> : Télécharge une image depuis un registre. docker pull nginx:latest

  • docker run <nom_image> : Crée et lance un nouveau conteneur à partir d’une image.

    • -d : Lance le conteneur en mode détaché (en arrière-plan).
    • -p <port_hote>:<port_conteneur> : Publie un port. Mappe le port du conteneur sur un port de votre machine.
    • --name <nom> : Donne un nom lisible au conteneur.
  • docker ps : Process Status. Liste les conteneurs en cours d’exécution.

    • docker ps -a : Liste tous les conteneurs, y compris ceux qui sont arrêtés.
  • docker stop <nom_ou_id_conteneur> : Arrête un conteneur en cours d’exécution.

  • docker rm <nom_ou_id_conteneur> : Supprime un conteneur arrêté.

Workflow simple : Lancer un serveur web Nginx

# 1. Télécharger la dernière image Nginx depuis Docker Hub
docker pull nginx

# 2. Lancer un conteneur à partir de cette image
# -d : en arrière-plan
# --name webserver : on le nomme 'webserver'
# -p 8080:80 : on mappe le port 80 du conteneur sur le port 8080 de notre machine
docker run -d --name webserver -p 8080:80 nginx

# 3. Vérifier qu'il tourne
docker ps

# 4. Ouvrez votre navigateur et allez sur http://localhost:8080
# Vous devriez voir la page d'accueil de Nginx !

# 5. Arrêter le serveur
docker stop webserver

# 6. Le supprimer
docker rm webserver

Bonnes pratiques

  • Utilisez des tags de version spécifiques pour vos images (nginx:1.21) plutôt que latest pour garantir la reproductibilité.
  • Donnez des noms explicites à vos conteneurs avec --name pour les retrouver facilement.
  • Nettoyez régulièrement les anciens conteneurs (docker rm) et images (docker rmi) pour libérer de l’espace disque.

Exercices

  1. Installez Docker :

    • Si ce n’est pas déjà fait, installez Docker Desktop (pour Mac/Windows) ou Docker Engine (pour Linux) en suivant les instructions sur le site officiel de Docker.
  2. Lancez un conteneur interactif :

    • Exécutez la commande docker run -it ubuntu bash.
    • -it permet de lancer un terminal interactif à l’intérieur du conteneur.
    • Vous êtes maintenant dans un shell à l’intérieur d’un conteneur Ubuntu. Exécutez quelques commandes (ls /, echo "hello from container").
    • Tapez exit pour quitter le conteneur (qui s’arrêtera alors).
  3. Jouez avec un serveur de base de données :

    • Lancez un conteneur PostgreSQL : docker run -d --name ma_db -e POSTGRES_PASSWORD=monsecret postgres.
    • L’option -e permet de passer des variables d’environnement.
    • Utilisez docker ps pour voir qu’il tourne.
    • Utilisez docker logs ma_db pour voir les journaux de démarrage de la base de données.
    • Arrêtez et supprimez le conteneur avec docker stop ma_db et docker rm ma_db.