Déployer et Exécuter un Conteneur Docker : Du Script à la Base de Données

@joekakone

Joseph Konka @joekakone

03/03/2026 · 10 min

Maîtrisez le cycle de vie d'un conteneur Docker pour vos charges Data : mapping de ports, persistance des données avec les volumes (-v), variables d'environnement secrètes et gestion du cycle de vie.

Vous avez votre image Docker prête à l'emploi. Il est temps de lui donner vie en lançant un conteneur.

Dans l'univers de la Data et de l'Analytics, démarrer un conteneur ne se limite pas à afficher du texte dans une console. Vous aurez besoin de : 1. Rendre accessibles des interfaces graphiques (ex: JupyterLab sur le port 8888, Metabase sur le port 3000, ou une API de prédiction FastAPI sur le port 8000). 2. Garantir la persistance de vos données pour que vos tables SQL ou vos fichiers nettoyés ne disparaissent pas à l'extinction du conteneur. 3. Injecter des identifiants sécurisés (mots de passe de bases de données, clés d'API cloud) sans jamais les inscrire en dur dans vos images.

Dans ce guide, nous décortiquons la commande maîtresse docker run et toutes ses options stratégiques.


⚡ Anatomie de la Commande Maîtresse : docker run#

Voici la commande type utilisée pour déployer un service analytique complet :

Démarrage d'un conteneur avec options de production
docker run -d \
  --name mon-postgres \
  -p 5432:5432 \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_USER=admin \
  -e POSTGRES_PASSWORD=SuperSecretPassword123 \
  -e POSTGRES_DB=analytics_db \
  --restart=always \
  postgres:17

Décortiquons chaque argument :

  • -d (Detached mode) : Lance le conteneur en arrière-plan et libère immédiatement votre terminal.
  • --name mon-postgres : Donne un nom lisible et mémorisable au conteneur (au lieu d'un nom aléatoire généré par Docker comme happy_curie).
  • -p 5432:5432 (Port mapping) : Lie le port 5432 de votre machine hôte au port 5432 interne du conteneur.
  • -v pgdata:/var/lib/postgresql/data (Volume) : Attache un volume persistant pour stocker les données sur le disque de la machine hôte.
  • -e VARIABLE=valeur : Définit des variables d'environnement lues par l'application au démarrage.
  • --restart=always : Redémarre automatiquement le conteneur si la machine reboot ou si le service crashe.
  • postgres:17 : L'image Docker et son tag de version à instancier.

🌐 Comprendre le Mapping de Ports (-p)#

Un conteneur Docker possède sa propre interface réseau isolée avec son adresse IP privée. Par défaut, aucun port n'est accessible depuis l'extérieur.

Pour communiquer avec un serveur web ou une base de données tournant dans le conteneur, vous devez ouvrir une passerelle grâce au drapeau -p :

       VOTRE MACHINE HÔTE                     LE CONTENEUR DOCKER
┌──────────────────────────────┐        ┌──────────────────────────────┐
│ Navigateur Web :             │        │ Service interne (ex: Jupyter)│
│ http://localhost:8888        │        │ Écoute sur le port 8888      │
│                              │        │                              │
│   Port Hôte 8888 ────────────┼────────┼──► Port Conteneur 8888       │
└──────────────────────────────┘        └──────────────────────────────┘
                    Syntaxe : -p PortHôte:PortConteneur

[!TIP] Résoudre les conflits de ports :
Si vous avez déjà un serveur PostgreSQL installé en local qui occupe le port 5432, vous pouvez faire correspondre un port hôte différent :

docker run -p 5433:5432 postgres:17
Vous vous connecterez alors depuis votre client SQL (DBeaver, Python) via localhost:5433 sans aucun conflit !


💾 La Règle d'Or en Data : Les Volumes et la Persistance (-v)#

Par conception, les conteneurs Docker sont éphémères (stateless). Tout fichier créé à l'intérieur d'un conteneur est écrit sur une couche temporaire en écriture. Si le conteneur est détruit avec docker rm, toutes vos données sont définitivement perdues !

Pour conserver vos données, Docker propose deux approches majeures :

┌────────────────────────────────────────────────────────┐
│ 1. LES VOLUMES NOMMÉS (Gérés par Docker)               │
│ -v pg_data:/var/lib/postgresql/data                    │
│ ──► Idéal pour les bases de données (haute performance)│
└────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────┐
│ 2. LES MONTAGES DE LIAISON (Bind Mounts)               │
│ -v /chemin/local/mes_scripts:/app/scripts              │
│ ──► Idéal pour partager vos notebooks et scripts de code│
└────────────────────────────────────────────────────────┘

Cas concret : Exécuter un conteneur JupyterLab avec montage local#

Lancer JupyterLab avec accès à votre dossier de travail local
docker run -d \
  --name mon-jupyter \
  -p 8888:8888 \
  -v $(pwd)/notebooks:/home/jovyan/work \
  jupyter/datascience-notebook:latest
Tous les notebooks que vous créerez dans le dossier /home/jovyan/work de l'interface Jupyter seront instantanément enregistrés dans votre dossier physique local ./notebooks !


🔒 Sécuriser les Identifiants : Les Variables d'Environnement (-e)#

En ingénierie décisionnelle, les scripts doivent se connecter à des bases de données de production ou à des buckets S3. Ne commettez jamais l'erreur d'inscrire vos clés d'API dans votre code source ou votre Dockerfile.

Passez-les lors de l'exécution avec -e ou regroupez-les dans un fichier .env confidentiel :

Lancer un conteneur avec un fichier .env
docker run -d \
  --name pipeline-extract \
  --env-file .env \
  mon-pipeline:1.0

🛠️ Administrer le Cycle de Vie des Conteneurs#

Voici la boîte à outils essentielle du quotidien :

1. Consulter les conteneurs en cours d'exécution (docker ps)#

Lister les conteneurs actifs
docker ps

Pour afficher l'intégralité des conteneurs, y compris ceux qui se sont éteints ou ont crashé :

Lister TOUS les conteneurs (actifs et inactifs)
docker ps -a

2. Arrêter et relancer un conteneur#

Arrêter un conteneur en douceur
docker stop mon-postgres

Pour le redémarrer plus tard sans perdre aucune donnée :

Relancer un conteneur existant
docker start mon-postgres

3. Supprimer un conteneur#

Une fois le conteneur arrêté :

Supprimer définitivement le conteneur
docker rm mon-postgres

[!TIP] Le conteneur jetable (--rm) pour les tâches ponctuelles :
Pour exécuter un script de nettoyage ou de migration de données qui ne doit tourner qu'une seule fois, ajoutez le drapeau --rm :

docker run --rm mon-pipeline-etl:1.0
Dès que le script Python termine son exécution, Docker nettoie et supprime automatiquement le conteneur. Votre système reste parfaitement propre !


Vous savez désormais comment lancer et administrer des conteneurs isolés et persistants. Dans la prochaine partie, nous verrons comment interagir directement avec un conteneur en cours d'exécution (ouvrir un shell interactif, transférer des fichiers et analyser les logs d'erreurs).

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue