Introduction#
Docker est une plateforme open-source qui permet d’emballer des applications et leurs dépendances dans des conteneurs portables. Les conteneurs sont des environnements légers, cohérents et reproductibles, ce qui fait de Docker une technologie centrale dans les pratiques DevOps, les pipelines CI/CD et l’Infrastructure as Code (IaC).
Avec Docker, tu peux :
- Exécuter des applications dans des environnements isolés.
- Garantir un comportement identique entre le développement, les tests et la production.
- Facilement mettre à l’échelle des services et orchestrer plusieurs conteneurs.
Vocabulaire#
Concepts de base#
- Conteneur : Un environnement léger et autonome qui emballe une application avec ses dépendances.
- Image : Un modèle en lecture seule utilisé pour créer des conteneurs.
- Dockerfile : Un fichier texte contenant des instructions pour construire une image Docker.
- Registry : Un dépôt pour stocker et distribuer des images Docker (Docker Hub, registry auto-hébergé).
- Container Runtime : Logiciel qui exécute les conteneurs (Docker Engine).
- Volume : Un mécanisme de stockage persistant pour les conteneurs.
- Réseau : Définit comment les conteneurs communiquent entre eux ou avec l’extérieur.
- Docker Compose : Un outil pour définir et exécuter des applications multi-conteneurs à l’aide de YAML.
- Docker Context : Un ensemble de paramètres qui permet de basculer entre différents environnements Docker (local, distant, Kubernetes, ..) pour gérer plusieurs hôtes ou clusters de manière transparente.
Objets Docker#
- ID / Nom du conteneur : Identifiant unique pour les conteneurs en cours d’exécution.
- Tag : Une étiquette pour identifier les versions d’images (
:latest,:v1.0). - Couche (Layer) : Chaque instruction dans un Dockerfile crée une nouvelle couche d’image.
- Mappage de ports (Port Mapping) : Exposition des ports du conteneur vers l’hôte (
-p hostPort:containerPort). - EntryPoint : La commande par défaut exécutée au démarrage d’un conteneur.
- CMD : Les arguments par défaut pour l’EntryPoint du conteneur.
- Variables d’environnement : Variables transmises aux conteneurs pour configurer leur comportement à l’exécution.
Commandes Docker#
- docker build : Construire une image à partir d’un Dockerfile.
- docker run : Créer et démarrer un conteneur à partir d’une image.
- docker ps : Lister les conteneurs en cours d’exécution.
- docker stop / docker kill : Arrêter un conteneur en cours d’exécution.
- docker rm : Supprimer un conteneur arrêté.
- docker rmi : Supprimer une image.
- docker logs : Afficher les logs d’un conteneur.
- docker exec : Exécuter une commande à l’intérieur d’un conteneur en cours d’exécution.
- docker-compose up / down : Démarrer ou arrêter des applications multi-conteneurs.
- docker system prune : Supprimer tous les conteneurs, réseaux et images inutilisés.
- docker context create : Créer un nouveau contexte pour se connecter à un autre hôte Docker ou cluster.
- docker context use : Changer de contexte actif pour basculer vers un environnement Docker spécifique..
Instructions du Dockerfile#
- FROM : Image de base à utiliser.
- RUN : Exécuter des commandes pour installer des paquets ou configurer l’image.
- COPY / ADD : Copier des fichiers de l’hôte vers l’image.
- WORKDIR : Définir le répertoire de travail pour les instructions suivantes.
- EXPOSE : Déclarer les ports sur lesquels le conteneur écoutera.
- ENV : Définir des variables d’environnement.
- ENTRYPOINT : Définir le point d’entrée du conteneur.
- CMD : Arguments par défaut pour l’ENTRYPOINT.
Prérequis#
- Docker Engine installé sur ton hôte (Linux, macOS ou Windows).
- Docker Compose installé si tu utilises des configurations multi-conteneurs.
- Connaissance de l’utilisation de la ligne de commande et des commandes Linux de base.
- Optionnel : Un registry privé si tu prévois d’héberger tes propres images (par exemple, Gitea ou Nexus).
Fiche Recap#
| Commande | Utilité | Exemple |
|---|---|---|
docker build -t <monapp:1.0> . | Construire une image | docker build -t monapp:1.0 |
docker tag monapp:1.0 monregistry.local/monapp:1.0 | Étiqueter une image locale | docker tag monapp:1.0 monregistry.local/monapp:1.0 |
docker push monregistry.local/monapp:1.0 | Envoyer une image vers un registry | docker push monregistry.local/monapp:1.0 |
docker run -d -p 8080:80 monapp:1.0 | Lancer un conteneur en arrière-plan | docker run -d -p 8080:80 monapp:1.0 |
docker ps | Lister les conteneurs en cours | |
docker stop <conteneur> | Arrêter un conteneur | docker stop nginx |
docker rm <conteneur> | Supprimer un conteneur | docker rm nginx |
docker rmi <image>:<version> | Supprimer une image | docker rmi nginx:1.0 |
docker logs <conteneur> | Afficher les logs d’un conteneur | docker logs nginx |
docker exec -it <conteneur> <commande> | Exécuter une commande dans un conteneur | docker exec -it nginx sh |
docker compose up -d | Démarrer une application multi-conteneurs | |
docker compose down | Arrêter une application multi-conteneurs | |
docker system prune | Nettoyer les objets inutilisés | |
docker context create --docker host=ssh://<user>@<host> <nom-context> | Créer un contexte | docker context create --docker host=ssh://linux@vm-infra vm-infra |
docker context use <nom-context> | Change de contexte | docker context use vm-infra |

