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 :
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 commehappy_curie).-p 5432:5432(Port mapping) : Lie le port5432de votre machine hôte au port5432interne 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 :
Vous vous connecterez alors depuis votre client SQL (DBeaver, Python) via
Si vous avez déjà un serveur PostgreSQL installé en local qui occupe le port5432, vous pouvez faire correspondre un port hôte différent :localhost:5433sans 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#
docker run -d \
--name mon-jupyter \
-p 8888:8888 \
-v $(pwd)/notebooks:/home/jovyan/work \
jupyter/datascience-notebook:latest
/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 :
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)#
Pour afficher l'intégralité des conteneurs, y compris ceux qui se sont éteints ou ont crashé :
2. Arrêter et relancer un conteneur#
Pour le redémarrer plus tard sans perdre aucune donnée :
3. Supprimer un conteneur#
Une fois le conteneur arrêté :
[!TIP] Le conteneur jetable (
Dès que le script Python termine son exécution, Docker nettoie et supprime automatiquement le conteneur. Votre système reste parfaitement propre !--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:
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