Débutant45 min30 XP
Objectifs de cette leçon
- Créer et gérer des conteneurs
- Exécuter des commandes dans un conteneur
- Comprendre le cycle de vie d'un conteneur
Conteneurs Docker 📦
Cycle de vie d'un conteneur
┌─────────────┐ docker run ┌──────────────┐ │ │ ──────────────────→ │ │ │ Image │ │ Conteneur │ │ (statique) │ ←────────────────── │ (actif) │ │ │ docker rm │ │ └─────────────┘ └──────┬───────┘ │ docker stop │ ↓ ┌──────────────┐ │ Arrêté │ │ (stopped) │ └──────┬───────┘ │ docker rm │ ↓ ┌──────────────┐ │ Supprimé │ │ (removed) │ └──────────────┘
Les états d'un conteneur
| État | Description | Commande |
|---|---|---|
| Created | Créé mais jamais lancé | docker create |
| Running | En cours d'exécution | docker run |
| Paused | Suspendu (processus gelés) | docker pause |
| Restarting | En train de redémarrer | docker restart |
| Exited | Arrêté normalement ou en erreur | docker stop |
| Dead | Dans un état erroné | docker rm -f |
Créer et gérer un conteneur
# Créer un conteneur sans le lancer docker create --name mon-web nginx:alpine # Lancer le conteneur docker start mon-web # Lancer avec un terminal interactif docker run -it --name mon-terminal ubuntu bash # Voir les conteneurs actifs docker ps # Voir TOUS les conteneurs docker ps -a # Arrêter (grâce → force après 10s) docker stop mon-web # Forcer l'arrêt immédiat docker kill mon-web # Redémarrer docker restart mon-web # Supprimer un conteneur arrêté docker rm mon-web # Forcer la suppression (même si en cours) docker rm -f mon-web
Interaction avec un conteneur
Exécuter une commande dans un conteneur actif
# Exécuter une commande unique docker exec mon-web cat /etc/nginx/nginx.conf # Ouvrir un terminal dans le conteneur docker exec -it mon-web bash # Utilisateur nginx dans le conteneur docker exec -it -u www-data mon-web sh
Copier des fichiers
# Copier DEPUIS le conteneur vers l'hôte docker cp mon-web:/etc/nginx/nginx.conf ./nginx.conf # Copier DEPUIS l'hôte vers le conteneur docker cp ./config.json mon-web:/app/config.json
Les ports
# Mapper le port 8080 de l'hôte vers le port 80 du conteneur docker run -d -p 8080:80 nginx # Mapper plusieurs ports docker run -d -p 3000:3000 -p 8080:80 mon-app # Mapper sur toutes les interfaces docker run -d -p 0.0.0.0:8080:80 nginx # Exposer le port sans le mapper docker run -d --expose 3000 mon-app
Format : -p <hôte>:<conteneur> ou -p <hôte>:<conteneur>/<protocol>
Les variables d'environnement
# Une variable docker run -e NODE_ENV=production mon-app # Plusieurs variables docker run -e DB_HOST=mysql -e DB_PORT=3306 mon-app # Depuis un fichier .env docker run --env-file .env mon-app # Voir les variables dans le conteneur docker exec mon-app env
Les logs
# Voir les logs en temps réel docker logs mon-app # Suivre les logs en continu docker logs -f mon-app # Voir les 50 dernières lignes docker logs --tail 50 mon-app # Voir les logs avec timestamps docker logs -t mon-app
Resource limits
# Limiter la mémoire à 512 Mo docker run -d --memory=512m mon-app # Limiter le CPU à 1 cœur docker run -d --cpus=1.0 mon-app # Limiter les CPU (2 cœurs sur 4) docker run -d --cpus=2 mon-app # Voir l'usage en temps réel docker stats mon-app
Résumé des commandes
| Commande | Description |
|---|---|
docker run | Créer + démarrer |
docker create | Créer sans démarrer |
docker start | Démarrer un conteneur créé |
docker stop | Arrêter gracieusement |
docker kill | Arrêter forcé |
docker restart | Redémarrer |
docker pause | Suspendre |
docker unpause | Reprendre |
docker rm | Supprimer |
docker exec | Exécuter dans le conteneur |
docker logs | Voir les logs |
docker stats | Voir les ressources |
Exercices 🎯
- Cycle de vie : Créez un conteneur, lancez-le, arrêtez-le, redémarrez-le, supprimez-le.
- Ports : Lancez nginx sur le port 3000 et accédez-y via
curl. - Environnement : Passez une variable d'environnement et vérifiez-la avec
docker exec. - Logs : Lancez un conteneur et observez ses logs en temps réel.
Prochaine leçon : Les volumes et la persistance des données.
Cycle de vie d'un conteneur
Cliquez sur une étape📦Créé
$ docker create nginx
L'image est chargée, le conteneur est prêt mais pas encore lancé.
Commande à retenir
docker create nginx1/5