MaĂźtriser Docker đł : conteneurs, images et bonnes pratiques
Mise Ă jour :

Docker est devenu un outil incontournable pour simplifier le dĂ©ploiement dâapplications. Cette formation va me permettre de vous accompagner dans la prise en main de Docker, en me concentrant sur son utilisation pratique pour la gestion des conteneurs. Vous dĂ©couvrirez comment Docker peut vous aider Ă isoler vos applications et Ă les exĂ©cuter de maniĂšre indĂ©pendante, quel que soit lâenvironnement sous-jacent.
Câest quoi Docker ?
Docker est une plateforme open source qui simplifie le dĂ©ploiement et la gestion dâapplications en utilisant des conteneurs.
ConcrĂštement, un conteneur est une unitĂ© lĂ©gĂšre et portable qui regroupe tout ce dont une application a besoin pour fonctionner : le code, les bibliothĂšques et les dĂ©pendances. GrĂące Ă Docker, ces conteneurs peuvent sâexĂ©cuter de maniĂšre isolĂ©e, quel que soit lâenvironnement sous-jacent, que ce soit sur votre ordinateur, un serveur ou dans le cloud.
Lâavantage principal de Docker est quâil permet dâĂ©viter les fameux âça marche chez moi, mais pas ailleursâ en garantissant que votre application tourne de la mĂȘme façon partout. Cela rend vos dĂ©ploiements plus rapides, plus flexibles et plus faciles Ă gĂ©rer.
Lâhistoire de Docker
Lâhistoire de Docker commence en 2010, lorsque Solomon Hykes, un ingĂ©nieur français, commence Ă travailler sur un projet personnel de virtualisation lĂ©gĂšre. LâidĂ©e Ă©tait de crĂ©er un outil qui simplifierait le processus de dĂ©veloppement, de test et de dĂ©ploiement dâapplications en utilisant des conteneurs.
En 2013, Docker a Ă©tĂ© publiĂ© en tant que projet open source, initialement appelĂ© âdotCloudâ en rĂ©fĂ©rence Ă la sociĂ©tĂ© dotCloud fondĂ©e par Solomon Hykes. Docker a rapidement gagnĂ© en popularitĂ© parmi les dĂ©veloppeurs et les administrateurs systĂšme.
En juin 2014, Docker 1.0 a Ă©tĂ© officiellement lancĂ©. CâĂ©tait un jalon important, marquant la maturitĂ© de la technologie de conteneurisation. Docker est devenu un outil standard pour les dĂ©veloppeurs et les opĂ©rations informatiques.
Concepts fondamentaux de Docker
Avant de se plonger dans lâutilisation pratique de Docker, il est essentiel de bien comprendre ses concepts fondamentaux. Docker repose sur plusieurs notions clĂ©s qui permettent de gĂ©rer efficacement les applications et leurs environnements. Voici une explication des concepts principaux : images, containers, Dockerfile, volumes et rĂ©seaux.
Images Docker
Une image Docker est un package contenant tout ce dont une application a besoin pour fonctionner : le code, les bibliothĂšques, les dĂ©pendances et les configurations systĂšme. Une image est immuable, câest-Ă -dire quâelle ne change pas une fois créée. Câest Ă partir de cette image quâon va crĂ©er des containers.
Les images sont souvent basĂ©es sur dâautres images. Par exemple, une image de
base comme alpine ou ubuntu peut ĂȘtre utilisĂ©e comme point de dĂ©part, Ă
laquelle on ajoute des fichiers et des configurations spécifiques.
Containers
Un container est une instance en cours dâexĂ©cution dâune image Docker. Il sâagit de lâentitĂ© active qui exĂ©cute une application. Les containers partagent le noyau du systĂšme dâexploitation de lâhĂŽte, ce qui les rend beaucoup plus lĂ©gers que les machines virtuelles. Cependant, chaque container fonctionne dans son propre environnement isolĂ© en sâappuyant sur les namespaces et les cgroups de Linux.
Un container peut ĂȘtre créé, dĂ©marrĂ©, arrĂȘtĂ© et supprimĂ©. Contrairement aux images, un container peut avoir un Ă©tat modifiable (par exemple, des fichiers qui changent ou des donnĂ©es qui sont ajoutĂ©es pendant lâexĂ©cution).
Dockerfile
Le Dockerfile est un fichier texte qui contient une sĂ©rie dâinstructions permettant de crĂ©er une image Docker. Câest grĂące Ă ce fichier que vous allez pouvoir automatiser la crĂ©ation dâune image, en spĂ©cifiant les dĂ©pendances, les fichiers Ă copier, les commandes Ă exĂ©cuter, etc. Chaque ligne du Dockerfile correspond Ă une Ă©tape dans le processus de construction de lâimage.
Les couches (Layers)
Un concept fondamental dans Docker est celui des layers (couches). Chaque image Docker est composĂ©e de plusieurs couches empilĂ©es les unes sur les autres. Chaque couche correspond Ă une instruction dans le Dockerfile (par exemple, RUN, COPY, ADD). Lorsque Docker construit une image, il exĂ©cute chaque instruction du Dockerfile et crĂ©e une nouvelle couche Ă chaque Ă©tape. Ces couches sont immutables et cachĂ©es, ce qui signifie quâune fois créées, elles ne changent pas.
Lâavantage principal de ce systĂšme est que Docker utilise un mĂ©canisme de mise en cache des couches. Si une couche nâa pas changĂ© depuis la derniĂšre construction, Docker va simplement la rĂ©utiliser au lieu de la reconstruire. Cela accĂ©lĂšre Ă©normĂ©ment la construction des images, en particulier pour les images complexes.
Chaque couche est stockĂ©e comme une diffĂ©rence par rapport Ă la couche prĂ©cĂ©dente (par exemple, les modifications de fichiers ou les nouveaux fichiers ajoutĂ©s). Le dernier ensemble de couches forme une image complĂšte, qui peut ĂȘtre utilisĂ©e pour exĂ©cuter des containers.
Volumes
Les volumes Docker sont utilisĂ©s pour persister des donnĂ©es en dehors du cycle de vie des containers. En effet, lorsque vous supprimez un container, toutes les donnĂ©es quâil contenait disparaissent. Les volumes permettent de sauvegarder ces donnĂ©es de maniĂšre permanente, mĂȘme si le container est supprimĂ© et recréé.
Docker permet de monter des volumes, câest-Ă -dire de connecter une partie du systĂšme de fichiers de lâhĂŽte au container. Cela permet aussi de partager des donnĂ©es entre plusieurs containers.
Réseaux
Docker crĂ©e un rĂ©seau par dĂ©faut appelĂ© bridge, qui permet aux containers de communiquer entre eux. Cependant, vous pouvez crĂ©er et gĂ©rer diffĂ©rents types de rĂ©seaux pour mieux contrĂŽler comment les containers interagissent entre eux et avec lâextĂ©rieur. Docker propose plusieurs types de rĂ©seaux : bridge, host et overlay.
- Le rĂ©seau bridge est le rĂ©seau par dĂ©faut. Il isole chaque container dans son propre espace rĂ©seau, mais permet la communication avec lâhĂŽte.
- Le rĂ©seau host permet au container dâutiliser directement lâinterface rĂ©seau de lâhĂŽte, sans isolation.
- Le rĂ©seau overlay est utilisĂ© dans des environnements dâorchestration comme Docker Swarm ou Kubernetes et permet de connecter des containers sur diffĂ©rents hĂŽtes.
Disponibilité de Docker
Docker est disponible sur les plateformes suivantes :
- Les distributions Linux : Ubuntu, Fedora, RHEL, Centos, Gentoo, ArchLinux, openSUSE, CRUX,âŠ
- Les systĂšmes de cloud : Amazon EC2, Google Compute Engine et Rackspace.
- Les systĂšmes dâexploitations Mac Os X et Windows. Sous Windows Docker sâappuie sur une mini VM Linux packagĂ©e dans le produit Docker Desktop â.
Installation de Docker
Lâinstallation de Docker est la premiĂšre Ă©tape pour commencer Ă travailler avec des containers. Docker peut ĂȘtre installĂ© sur plusieurs systĂšmes dâexploitation, tels que Linux, Windows et macOS. Dans cette section, je vais vous guider Ă travers les Ă©tapes pour installer Docker sur chacune de ces plateformes. Nous verrons Ă©galement comment vĂ©rifier que Docker est bien installĂ© et prĂȘt Ă ĂȘtre utilisĂ©.
Installation de Docker sur Linux (Ubuntu)
Sur Linux, Docker est compatible avec plusieurs distributions, mais ici, je vais me concentrer sur Ubuntu, lâune des distributions les plus populaires. Lâinstallation de Docker sur Ubuntu nĂ©cessite quelques Ă©tapes pour garantir que vous avez la derniĂšre version disponible.
-
Mettre Ă jour le systĂšme :
Avant dâinstaller Docker, il est recommandĂ© de mettre Ă jour vos paquets pour sâassurer que le systĂšme est Ă jour.
Terminal window sudo apt-get updatesudo apt-get upgrade -
Installer les paquets nécessaires :
Docker nécessite certains paquets comme
apt-transport-https,ca-certificates,curletsoftware-properties-common. Installez-les avec la commande suivante :Terminal window sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -
Ajouter la clé GPG officielle de Docker :
Cette étape permet de vérifier que les paquets installés proviennent bien des dépÎts officiels de Docker.
Terminal window curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -
Ajouter le dépÎt Docker :
Ajoutez le dĂ©pĂŽt Docker Ă vos sources pour vous assurer dâinstaller la derniĂšre version.
Terminal window echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -
Installer Docker :
AprÚs avoir ajouté le dépÎt, mettez à jour vos paquets et installez Docker.
Terminal window sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io -
Permissions utilisateur :
Par défaut, Docker nécessite des privilÚges super-utilisateur (root). Pour éviter de devoir utiliser
sudoà chaque commande, ajoutez votre utilisateur au groupedocker.Terminal window sudo usermod -aG docker ${USER}AprÚs cette commande, déconnectez-vous puis reconnectez-vous pour appliquer les changements.
Installation de Docker sur Windows
Sur Windows, Docker est installĂ© via Docker Desktop, un outil qui permet dâexĂ©cuter Docker de maniĂšre native ou avec une machine virtuelle en arriĂšre-plan. Docker Desktop offre une interface graphique simplifiĂ©e pour gĂ©rer vos containers, mais permet aussi dâutiliser la CLI Docker.
-
Télécharger Docker Desktop :
Rendez-vous sur le site officiel de Docker pour tĂ©lĂ©charger Docker Desktop pour Windows : https://www.docker.com/products/docker-desktop â.
-
ExĂ©cuter lâinstallateur :
Lancez le fichier tĂ©lĂ©chargĂ© et suivez les instructions de lâassistant dâinstallation. Assurez-vous dâactiver la configuration recommandĂ©e de WSL 2 (Windows Subsystem for Linux) pour une meilleure performance avec Docker.
-
Redémarrer le systÚme :
Une fois lâinstallation terminĂ©e, Docker Desktop vous demandera peut-ĂȘtre de redĂ©marrer votre machine.
-
Lancer Docker Desktop :
AprĂšs le redĂ©marrage, lancez Docker Desktop depuis le menu DĂ©marrer. Une fois lancĂ©, vous devriez voir une icĂŽne Docker dans la barre des tĂąches. Si lâicĂŽne est verte, cela signifie que Docker est prĂȘt Ă ĂȘtre utilisĂ©.
Installation de Docker sur macOS avec Colima
Colima est une alternative lĂ©gĂšre Ă Docker Desktop sur macOS. Il utilise Lima, un gestionnaire de machines virtuelles et sâintĂšgre avec QEMU pour exĂ©cuter des containers de maniĂšre efficace, sans nĂ©cessiter lâinstallation de Docker Desktop ni de dĂ©pendances lourdes. Colima est apprĂ©ciĂ© pour sa simplicitĂ©, sa compatibilitĂ© avec Homebrew et son faible impact sur les ressources systĂšme.
Avantages de Colima :
- Léger et rapide : Colima consomme moins de ressources systÚme que Docker Desktop, ce qui le rend idéal pour les machines avec une mémoire ou un CPU limités.
- Facile Ă installer et Ă utiliser : Colima sâinstalle rapidement via Homebrew et ne nĂ©cessite pas de configuration lourde.
- Open-source et basé sur des outils existants comme Lima et QEMU.
- Compatibilité Apple Silicon : Colima fonctionne parfaitement sur les Mac équipés de processeurs M1/M2, sans nécessiter de backend complexe.
Voici comment installer et configurer Docker avec Colima sur macOS.
-
Installer Homebrew (si ce nâest pas dĂ©jĂ fait) :
Homebrew est le gestionnaire de paquets de rĂ©fĂ©rence sur macOS. Si vous ne lâavez pas installĂ©, voici la commande pour lâajouter Ă votre systĂšme :
Terminal window /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Ensuite, mettez Ă jour Homebrew :
Terminal window brew update -
Installer Docker CLI :
Docker CLI est lâoutil en ligne de commande nĂ©cessaire pour interagir avec les containers. Colima utilise le Docker CLI, mais sans nĂ©cessiter Docker Desktop.
Terminal window brew install docker -
Installer Colima :
Utilisez Homebrew pour installer Colima, qui va gérer les containers via une machine virtuelle légÚre.
Terminal window brew install colima -
Démarrer Colima avec Docker :
Une fois Colima installé, vous pouvez le démarrer avec le support Docker. Colima va créer une machine virtuelle qui exécutera Docker en arriÚre-plan.
Terminal window colima startPar défaut, Colima configure un environnement Docker avec 2 processeurs et 2 Go de mémoire. Si vous avez besoin de plus de ressources, vous pouvez spécifier ces options lors du démarrage :
Terminal window colima start --cpu 4 --memory 4 -
Vérifier que Docker fonctionne avec Colima :
Vous pouvez maintenant vérifier si Docker fonctionne correctement en exécutant la commande suivante :
Terminal window docker --versionPuis lancez le container de test hello-world pour vérifier que tout fonctionne correctement.
Terminal window docker run hello-world -
Gérer Colima :
Pour stopper ou redĂ©marrer lâinstance Colima (et Docker), utilisez les commandes suivantes :
-
ArrĂȘter Colima (et Docker) :
Terminal window colima stop -
Redémarrer Colima :
Terminal window colima restart
Colima est également capable de gérer les volumes persistants, les réseaux et les partages de fichiers de maniÚre similaire à Docker Desktop.
-
Vérification du bon fonctionnement de Docker
Quelle que soit la plateforme sur laquelle Docker est installĂ©, il est important de vĂ©rifier que tout fonctionne bien. Pour cela, je recommande dâexĂ©cuter un container test en lançant un container simple Ă partir de lâimage hello-world. Cette image est conçue pour tester le bon fonctionnement de Docker.
docker run hello-worldSi Docker est bien installĂ©, vous devriez voir un message confirmant que le container sâest lancĂ© correctement.
Découverte de la CLI Docker
La CLI Docker (interface en ligne de commande) est lâoutil principal pour interagir avec Docker. Elle permet de gĂ©rer les containers, les images, les rĂ©seaux et les volumes via des commandes simples. Dans ce chapitre, je vais vous guider Ă travers les commandes de base de Docker, en vous expliquant comment tĂ©lĂ©charger des images, crĂ©er des containers et gĂ©rer vos applications containĂ©risĂ©es.
Recherche dâimages sur Docker Hub
Docker Hub est le registre officiel oĂč les dĂ©veloppeurs et les organisations publient des images Docker prĂȘtes Ă lâemploi. Vous pouvez y trouver des images de systĂšmes dâexploitation, de bases de donnĂ©es, de serveurs web et bien plus encore. Avant de tĂ©lĂ©charger une image, il est souvent utile de rechercher celle qui correspond Ă vos besoins. Docker CLI vous permet de rechercher des images directement Ă partir du terminal.
Pour rechercher une image sur Docker
Hub, vous pouvez utiliser la commande
docker search. Cette commande renvoie une liste dâimages correspondant Ă votre
terme de recherche, avec des informations utiles comme la description et le
nombre dâĂ©toiles (stars), qui est un indicateur de la popularitĂ© et de la
fiabilitĂ© de lâimage.
Exemple : Rechercher une image liée à nginx :
docker search nginxVous obtiendrez une sortie ressemblant Ă ceci :
NAME DESCRIPTION STARS OFFICIALnginx Official build of Nginx. 20184 [OK]nginx/nginx-quic-qns NGINX QUIC interop 1nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN⊠43nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo⊠94nginx/nginx-ingress-operator NGINX Ingress Operator for NGINX and NGINX P⊠2nginx/unit This repository is retired, use the Docker o⊠63nginx/unit-preview Unit preview features 0bitnami/nginx Bitnami container image for NGINX 193rapidfort/nginx RapidFort optimized, hardened image for NGINX 15kasmweb/nginx An Nginx image based off nginx:alpine and in⊠8ubuntu/nginx Nginx, a high-performance reverse proxy & we⊠118- NAME : Le nom de lâimage.
- DESCRIPTION : Une brĂšve description de lâimage.
- STARS : Un indicateur de popularitĂ© basĂ© sur les utilisateurs qui ont donnĂ© une âĂ©toileâ Ă lâimage.
- OFFICIAL : Le tag
[OK]indique que lâimage est officielle, câest-Ă -dire maintenue par les crĂ©ateurs ou les mainteneurs du logiciel. - AUTOMATED : Ce tag signifie que lâimage a Ă©tĂ© automatiquement gĂ©nĂ©rĂ©e Ă partir dâun Dockerfile Ă lâaide dâune intĂ©gration continue (CI).
Il est important de choisir une image bien maintenue, souvent identifiĂ©e par un grand nombre dâĂ©toiles et le tag [OFFICIAL], qui garantit que lâimage est fournie par lâorganisation officielle derriĂšre la technologie.
Télécharger une image Docker (pull)
La commande docker pull est utilisée pour télécharger une image Docker
depuis un registre, principalement Docker
Hub â. Une image contient
tout ce qui est nécessaire pour exécuter une application : le code, les
bibliothÚques et les dépendances. Avant de créer un container, vous devez
dâabord rĂ©cupĂ©rer lâimage Ă partir de laquelle ce container sera créé.
Exemple : Pour tĂ©lĂ©charger lâimage officielle de nginx, vous pouvez utiliser la commande suivante :
docker pull nginxUsing default tag: latestlatest: Pulling from library/nginx92c3b3500be6: Pull completeee57511b3c68: Extracting [==============================================> ] 36.18MB/38.51MB33791ce134bf: Download completecc4f24efc205: Download complete3cad04a21c99: Download complete486c5264d3ad: Download completeb3fd15a82525: Download completeCela tĂ©lĂ©chargera la derniĂšre version de lâimage nginx depuis Docker Hub. On
remarque le tag : latest. Je vais revenir plus tard sur ce concept.
Lister les images Docker présentes
La commande docker images est essentielle pour gérer les images Docker
stockées localement. Elle permet de lister et de consulter ces images ainsi que
leurs détails, facilitant ainsi leur gestion.
La syntaxe de la commande est trĂšs simple :
docker imagesLorsque vous exécutez cette commande, Docker renvoie une liste des images disponibles sur votre machine locale. Voici un exemple de sortie typique :
REPOSITORY TAG IMAGE ID CREATED SIZEdocker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx alpine b887aca7aed6 3 weeks ago 47MBnginx latest 195245f0c792 3 weeks ago 193MBerikvl87/languagetool latest 6a077d826d4f 4 months ago 581MB- REPOSITORY : Le nom du dĂ©pĂŽt (repository) de lâimage. Il sâagit
gĂ©nĂ©ralement du nom de lâimage (comme
nginx), mais cela peut aussi inclure le nom dâun utilisateur ou dâune organisation sur Docker Hub (par exemple,mydockerhub/myapp). - TAG : Le tag est une Ă©tiquette qui identifie une version spĂ©cifique de
lâimage. Par dĂ©faut, Docker utilise le tag
latestsi aucun autre tag nâest spĂ©cifiĂ©, mais des tags peuvent reprĂ©senter des versions spĂ©cifiques, comme1.0,alpine, ouv2.3. - IMAGE ID : LâID unique de lâimage. Il sâagit dâune chaĂźne
alphanumĂ©rique gĂ©nĂ©rĂ©e par Docker lors de la crĂ©ation de lâimage. Cet ID peut
ĂȘtre utilisĂ© pour rĂ©fĂ©rencer lâimage dans dâautres commandes Docker, comme
docker rmi(pour supprimer une image) oudocker run(pour crĂ©er un container Ă partir de cette image). - CREATED : La date Ă laquelle lâimage a Ă©tĂ© créée. Cela permet de voir lâanciennetĂ© des images et de dĂ©terminer si elles nĂ©cessitent une mise Ă jour.
- SIZE : La taille de lâimage sur le disque, indiquĂ©e en Mo (MB). Cette information est importante pour gĂ©rer lâespace disque, surtout si vous manipulez plusieurs images lourdes.
Si vous souhaitez obtenir plus dâinformations sur une image en particulier,
comme les couches qui la composent, ses variables dâenvironnement ou ses
volumes. Pour cela, vous pouvez utiliser la commande docker inspect.
Exemple : Inspecter lâimage nginx :
docker inspect nginxCette commande renvoie un ensemble de donnĂ©es au format JSON, vous fournissant des dĂ©tails techniques sur lâimage.
Créer une image Docker
La commande docker build est utilisĂ©e pour crĂ©er une image Docker Ă
partir dâun fichier appelĂ© Dockerfile. Le Dockerfile est un script texte
qui contient une sĂ©rie dâinstructions permettant de dĂ©finir lâenvironnement dans
lequel une application sera exécutée. Ces instructions peuvent inclure
lâinstallation de logiciels, la copie de fichiers, la dĂ©finition de variables
dâenvironnement, etc. La commande docker build exĂ©cute ces instructions et
produit une image Docker immuable.
La syntaxe de base de la commande docker build est la suivante :
docker build [OPTIONS] PATH- PATH : Le chemin vers le répertoire contenant le Dockerfile. Si le
Dockerfile est dans le répertoire courant, vous pouvez utiliser
.pour spĂ©cifier ce chemin. - OPTIONS : Des options facultatives pour contrĂŽler le processus de construction (par exemple, spĂ©cifier un tag ou optimiser la taille de lâimage).
Voici un exemple de Dockerfile simple qui utilise une image de base alpine, copie un fichier dans le container et exécute une commande lors du démarrage :
FROM alpine:3.18.4RUN apk update && \ apk upgrade# Installer NginxRUN apk add --no-cache nginx# Exposer le port 80 pour permettre l'accÚs HTTPEXPOSE 80# Démarrer NginxCMD ["nginx", "-g", "daemon off;"]Si vous ne maitrisez pas le gestionnaire de paquets apk, je vous recommande de lire mon guide sur apk pour mieux comprendre son fonctionnement.
Pour construire une image Ă partir de ce Dockerfile, placez le fichier
Dockerfile dans un répertoire et exécutez la commande suivante :
docker build -t myapp:1.0 .Sending build context to Docker daemon 2.048kBStep 1/5 : FROM alpine:3.18.4 ---> 3cc203321400Step 2/5 : RUN apk update && apk upgrade ---> Running in b4c966493073
...Step 3/5 : RUN apk add --no-cache nginx ---> Running in ad860f80fc79fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/aarch64/APKINDEX.tar.gzfetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/aarch64/APKINDEX.tar.gz(1/2) Installing pcre (8.45-r3)(2/2) Installing nginx (1.24.0-r7)Executing nginx-1.24.0-r7.pre-installExecuting nginx-1.24.0-r7.post-installExecuting busybox-1.36.1-r7.triggerOK: 9 MiB in 17 packages ---> Removed intermediate container ad860f80fc79 ---> e691a5e3520cStep 4/5 : EXPOSE 80 ---> Running in 5ce84ba92906 ---> Removed intermediate container 5ce84ba92906 ---> f28a702b100fStep 5/5 : CMD ["nginx", "-g", "daemon off;"] ---> Running in 8eb7de19291e ---> Removed intermediate container 8eb7de19291e ---> 1b5538b8380dSuccessfully built 1b5538b8380dSuccessfully tagged myapp:1.0- -t myapp:1.0 : Cette option permet de taguer lâimage avec un nom
(
myapp) et un tag de version (1.0). - . : Indique que Docker doit chercher le Dockerfile dans le répertoire courant.
Une fois la construction terminĂ©e, vous pouvez vĂ©rifier que lâimage a Ă©tĂ© correctement construite en listant les images sur votre machine :
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmyapp 1.0 1b5538b8380d 2 minutes ago 20.3MBExécuter des containers
La commande docker run est lâune des plus importantes de Docker, car elle
permet de crĂ©er et dĂ©marrer un container Ă partir dâune image
Docker. Elle est au cĆur du fonctionnement des containers, car câest cette
commande qui crĂ©e une instance active dâune image. La commande docker run est
trĂšs puissante et offre de nombreuses options pour personnaliser lâexĂ©cution des
containers.
La syntaxe de base est la suivante :
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]- IMAGE : Lâimage Docker Ă partir de laquelle le container sera créé (par
exemple,
nginx,ubuntu:20.04). - COMMAND (optionnel) : La commande Ă exĂ©cuter Ă lâintĂ©rieur du container
une fois démarré (par exemple,
/bin/bash). - ARG⊠(optionnel) : Les arguments à passer à la commande si nécessaire.
Voici quelques-unes des options les plus couramment utilisées avec docker run
:
-
-d: ExĂ©cution en arriĂšre-plan (mode dĂ©tachĂ©) Par dĂ©faut, un container sâexĂ©cute en mode interactif (en premier plan) dans votre terminal. Si vous souhaitez que le container fonctionne en arriĂšre-plan, utilisez lâoption-d(dĂ©tachĂ©).Terminal window docker run -d myapp:1.0Avec cette commande, Docker crĂ©e et dĂ©marre un container myapp:1.0 qui sâexĂ©cute en arriĂšre-plan, sans bloquer votre terminal. Vous pouvez ensuite interagir avec ce container via dâautres commandes.
-
-p: Redirection de ports La redirection de port permet de mapper un port du container à un port de la machine hÎte. Par exemple, si une application dans le container écoute sur le port 80, vous pouvez la rendre accessible via le port 8080 de votre machine hÎte.Terminal window docker run -d -p 8080:80 myapp:1.0Ici :
- Le port 80 Ă lâintĂ©rieur du container (port par dĂ©faut de nginx) est mappĂ© au port 8080 de la machine hĂŽte.
- Vous pouvez maintenant accéder à nginx via
http://localhost:8080sur votre machine hĂŽte.
-
--name: Nommer un container Par dĂ©faut, Docker attribue un nom alĂ©atoire Ă chaque container. Pour rendre la gestion des containers plus facile, vous pouvez spĂ©cifier un nom avec lâoption--name.Terminal window docker run -d --name mon_nginx nginxAvec cette commande, le container sera nommĂ© mon_nginx, ce qui permet de le gĂ©rer plus facilement par la suite (par exemple, avec
docker stop mon_nginxoudocker logs mon_nginx). -
--rm: Supprimer le container aprĂšs exĂ©cution Si vous voulez quâun container soit supprimĂ© automatiquement aprĂšs quâil sâarrĂȘte, utilisez lâoption--rm. Cela est particuliĂšrement utile pour les containers temporaires ou les tĂąches ponctuelles.Terminal window docker run --rm ubuntu echo "Hello, World"Dans cet exemple, Docker exĂ©cute lâimage ubuntu avec la commande
echo. DÚs que la commande se termine, le container est automatiquement supprimé. -
-it: Mode interactif avec terminal Lâoption-itest utilisĂ©e pour exĂ©cuter un container en mode interactif avec accĂšs Ă un terminal. Cela est utile lorsque vous voulez exĂ©cuter des commandes dans le container.Terminal window docker run -it ubuntu /bin/bashDans cet exemple, Docker dĂ©marre un container basĂ© sur lâimage ubuntu et ouvre un shell bash interactif dans le terminal. Vous pouvez maintenant exĂ©cuter des commandes comme si vous Ă©tiez connectĂ© directement Ă une machine Ubuntu.
GĂ©rer les versions dâimages
La commande docker tag permet dâajouter un tag (Ă©tiquette) Ă une image
Docker existante. Les tags sont utilisés pour identifier différentes versions
dâune mĂȘme image ou pour rĂ©fĂ©rencer une image dans un registre Docker (comme
Docker Hub). Ils facilitent la gestion des versions dâimages et permettent de
distinguer les images selon des environnements ou des fonctionnalités
spécifiques (ex : v1.0, latest, prod).
La syntaxe de base de la commande docker tag est :
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]- SOURCE_IMAGE[:TAG] : Lâimage source que vous voulez taguer. Vous pouvez
inclure le tag de lâimage source si elle en a un (par exemple,
myapp:1.0). - TARGET_IMAGE[:TAG] : Le nouveau tag que vous voulez attribuer Ă lâimage. Cela peut inclure un nouveau nom de dĂ©pĂŽt ou un nouveau tag.
Supposons que vous ayez une image locale appelée myapp avec un tag v1.0.
Vous voulez créer un nouveau tag v2.0 pour cette image afin de versionner
votre application. Voici comment vous pouvez le faire :
docker tag myapp:1.0 myapp:2.0Cette commande crĂ©e une nouvelle rĂ©fĂ©rence Ă la mĂȘme image, mais avec le tag
v2.0. Vous pouvez vérifier cela en listant les images locales avec docker images :
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmyapp 1.0 1b5538b8380d 18 minutes ago 20.3MBmyapp 2.0 1b5538b8380d 18 minutes ago 20.3MBVous verrez Ă la fois les tags v1.0 et v2.0 pour lâimage myapp, mais ils
pointeront tous deux vers le mĂȘme ID dâimage.
Lister les containers avec docker ps
La commande docker ps permet de lister les containers Docker en cours
dâexĂ©cution ou arrĂȘtĂ©s. Câest une commande essentielle pour visualiser les
informations importantes sur vos containers actifs, comme leur nom, leur
ID, les ports mappĂ©s, lâimage Ă partir de laquelle ils sont exĂ©cutĂ©s, et
plus encore. Elle permet Ă©galement de surveiller lâĂ©tat des containers dans
votre environnement Docker.
La commande de base pour afficher les containers en cours dâexĂ©cution est :
docker psPar défaut, docker ps affiche uniquement les containers actifs
(câest-Ă -dire en cours dâexĂ©cution). Pour lister tous les containers (y
compris les containers arrĂȘtĂ©s), vous devez utiliser lâoption -a.
docker ps -aVoici un exemple de sortie typique de la commande docker ps :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf1f86db17d2c myapp:1.0 "nginx -g 'daemon ofâŠ" 12 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp practical_banzai1c9b8569a9cd myapp:1.0 "nginx -g 'daemon ofâŠ" 23 minutes ago Up 23 minutes 80/tcp upbeat_gould4f8dd1f2f176 myapp:1.0 "-d" 23 minutes ago Created 80/tcp jovial_allen07dac3c0d17c erikvl87/languagetool "bash start.sh" 6 days ago Up 2 hours (healthy) 0.0.0.0:8010->8010/tcp, :::8010->8010/tcp LanguageToolExplication des colonnes :
- CONTAINER ID : LâID unique du container. Cet ID est utilisĂ© pour
rĂ©fĂ©rencer le container dans dâautres commandes Docker (par exemple,
docker stop,docker rm, etc.). - IMAGE : Lâimage Ă partir de laquelle le container a Ă©tĂ© créé. Cela vous
indique quelle version de lâapplication ou du service tourne dans le container
(ici,
myapp:1.0eterikvl87/languagetool). - COMMAND : La commande qui a Ă©tĂ© exĂ©cutĂ©e Ă lâintĂ©rieur du container au
moment de son lancement. Elle correspond Ă ce que lâimage a dĂ©fini dans le
Dockerfile via la directive
CMDouENTRYPOINT. - CREATED : Le moment oĂč le container a Ă©tĂ© créé.
- STATUS : LâĂ©tat du container. Cela peut ĂȘtre Up (en cours dâexĂ©cution), Exited (arrĂȘtĂ©), ou dâautres Ă©tats (comme Paused si vous avez mis un container en pause).
- PORTS : Les ports mappés entre le container et la machine hÎte. Par
exemple,
0.0.0.0:8080->80/tcpsignifie que le port 8080 de lâhĂŽte est mappĂ© au port 80 du container. - NAMES : Le nom du container. Docker gĂ©nĂšre un nom par dĂ©faut pour
chaque container si vous nâen spĂ©cifiez pas un avec lâoption
--namelors de la création du container.
Gérer les instances de containers
Les commandes docker stop et docker rm sont essentielles pour
arrĂȘter et supprimer les containers Docker. Ces deux commandes permettent de
gĂ©rer le cycle de vie des containers, quâil sâagisse dâarrĂȘter un container en
cours dâexĂ©cution ou de supprimer dĂ©finitivement un container qui nâest plus
nécessaire. Voici comment les utiliser de maniÚre efficace.
docker stop
La commande docker stop permet dâarrĂȘter un container en cours
dâexĂ©cution de maniĂšre propre et contrĂŽlĂ©e. Lorsquâun container est arrĂȘtĂ©,
Docker envoie un signal SIGTERM au processus principal du container pour lui
donner la possibilité de terminer correctement ses opérations. AprÚs un certain
délai (par défaut 10 secondes), Docker envoie un signal SIGKILL pour forcer
lâarrĂȘt si le processus ne sâest pas terminĂ©.
docker stop [OPTIONS] CONTAINER [CONTAINER...]- CONTAINER : LâID ou le nom du container que vous souhaitez arrĂȘter.
- OPTIONS : Les options disponibles incluent notamment la durĂ©e du dĂ©lai avant lâarrĂȘt forcĂ©.
Exemples :
-
ArrĂȘter un container avec son nom :
Terminal window docker stop mycontainerCette commande envoie un signal dâarrĂȘt au container nommĂ© mycontainer.
-
ArrĂȘter un container avec son ID :
Terminal window docker stop 4c01db0b339cIci, Docker arrĂȘte le container dont lâID est 4c01db0b339c.
docker rm
La commande docker rm permet de supprimer un container qui est arrĂȘtĂ©.
Une fois supprimĂ©, le container ne peut plus ĂȘtre redĂ©marrĂ© ou rĂ©cupĂ©rĂ©, Ă moins
de recrĂ©er un container Ă partir de lâimage originale. Cette commande est utile
pour nettoyer les containers qui ne sont plus utilisés afin de libérer de
lâespace disque.
docker rm [OPTIONS] CONTAINER [CONTAINER...]- CONTAINER : LâID ou le nom du container Ă supprimer.
- OPTIONS : Les options incluent la suppression forcée des containers actifs
avec
-f.
Exemples :
-
Supprimer un container arrĂȘtĂ© :
Terminal window docker rm mycontainerCette commande supprime le container nommĂ© mycontainer. Le container doit ĂȘtre arrĂȘtĂ© avant de pouvoir ĂȘtre supprimĂ©.
-
Supprimer plusieurs containers en une seule commande :
Vous pouvez spécifier plusieurs containers à supprimer en séparant leurs noms ou IDs.
Terminal window docker rm container1 container2 container3 -
Supprimer un container actif avec
-f:Si un container est en cours dâexĂ©cution, vous ne pouvez pas le supprimer directement. Il faut soit lâarrĂȘter dâabord avec
docker stop, soit utiliser lâoption-fpour forcer la suppression (ce qui arrĂȘte et supprime le container en une seule Ă©tape).Terminal window docker rm -f mycontainerCette commande force lâarrĂȘt et la suppression immĂ©diate de mycontainer.
Supprimer des images
La commande docker rmi est utilisée pour supprimer des images Docker
stockĂ©es localement sur votre machine. Cela permet de libĂ©rer de lâespace disque
ou de supprimer des images obsolÚtes ou non désirées. Contrairement à la
suppression de containers (docker rm), qui concerne les instances en cours
dâexĂ©cution dâune image, docker rmi supprime lâimage elle-mĂȘme, empĂȘchant
ainsi la crĂ©ation de nouveaux containers basĂ©s sur cette image, Ă moins quâelle
ne soit re-téléchargée ou reconstruite.
La syntaxe de base pour supprimer une image est la suivante :
docker rmi [OPTIONS] IMAGE [IMAGE...]- IMAGE : LâID ou le nom de lâimage Ă supprimer. Vous pouvez spĂ©cifier plusieurs images Ă la fois.
- OPTIONS : Des options supplémentaires pour contrÎler la suppression.
Exemple simple :
Pour supprimer une image par son ID ou son nom :
docker rmi nginx:latestou
docker rmi a9e5b1d98f9cDans cet exemple, Docker supprime lâimage nginx:latest ou lâimage avec
lâID a9e5b1d98f9c.
Options courantes de docker rmi
-
-f: Forcer la suppression dâune imageSi une image est utilisĂ©e par un container (en cours dâexĂ©cution ou arrĂȘtĂ©), Docker ne vous permettra pas de la supprimer par dĂ©faut. Pour forcer la suppression dâune image, utilisez lâoption
-f(force).Terminal window docker rmi -f nginx:latestCela force Docker Ă supprimer lâimage
nginx:latest, mĂȘme si des containers en dĂ©pendent. Attention : cela peut avoir des consĂ©quences si vous avez des containers actifs basĂ©s sur cette image. -
Supprimer plusieurs images en une seule commande
Vous pouvez spécifier plusieurs images à supprimer en une seule ligne de commande. Utilisez simplement les noms ou IDs des images, séparés par des espaces.
Terminal window docker rmi nginx:latest redis:alpine ubuntu:20.04Dans cet exemple, Docker supprimera les images
nginx:latest,redis:alpineetubuntu:20.04. -
Supprimer toutes les images inutilisées
Si vous avez accumulĂ© beaucoup dâimages inutilisĂ©es et souhaitez faire du mĂ©nage, vous pouvez utiliser la commande
docker image prunepour supprimer toutes les images dangling (câest-Ă -dire les images sans tag ou non utilisĂ©es).Terminal window docker image pruneCette commande supprime toutes les images qui ne sont pas utilisĂ©es par des containers en cours dâexĂ©cution et qui ne sont pas taguĂ©es. Pour forcer la suppression de toutes les images inutilisĂ©es sans confirmation, utilisez lâoption
-f:Terminal window docker image prune -f
Gérer les ressources Docker avec docker system
La commande docker system est une commande puissante qui permet de gérer
les ressources globales de Docker, telles que les containers, images,
volumes et réseaux. Elle regroupe plusieurs sous-commandes qui
permettent de nettoyer, surveiller et optimiser lâutilisation des ressources sur
votre systĂšme Docker.
La syntaxe de base de docker system est :
docker system [COMMAND]Voici un aperçu des sous-commandes principales disponibles avec docker system.
-
docker system df: VĂ©rifier lâutilisation des ressources DockerLa commande
docker system dfvous permet de vĂ©rifier lâespace disque utilisĂ© par Docker, ainsi que lâespace occupĂ© par les images, containers, volumes et rĂ©seaux.Terminal window docker system dfExemple de sortie :
Terminal window TYPE TOTAL ACTIVE SIZE RECLAIMABLEImages 15 3 2.35GB 1.2GB (51%)Containers 10 2 500MB 300MB (60%)Local Volumes 5 5 1.5GB 0B (0%)Build Cache 0 0 0B 0BExplication des colonnes :
- TYPE : Le type de ressource (images, containers, volumes, etc.).
- TOTAL : Le nombre total dâĂ©lĂ©ments pour chaque type.
- ACTIVE : Le nombre dâĂ©lĂ©ments actuellement utilisĂ©s.
- SIZE : Lâespace disque total occupĂ© par chaque type.
- RECLAIMABLE : Lâespace disque qui peut ĂȘtre rĂ©cupĂ©rĂ© (rĂ©utilisĂ© ou libĂ©rĂ©).
Cela permet dâidentifier rapidement quelles ressources consomment le plus dâespace et peuvent ĂȘtre nettoyĂ©es.
-
docker system prune: Nettoyer les ressources inutiliséesLa commande
docker system pruneest utilisĂ©e pour supprimer toutes les ressources inutilisĂ©es (images non utilisĂ©es, containers arrĂȘtĂ©s, volumes orphelins, rĂ©seaux non utilisĂ©s). Câest une maniĂšre efficace de nettoyer votre environnement Docker et de libĂ©rer de lâespace disque.Terminal window docker system pruneCela supprime :
- Les containers arrĂȘtĂ©s.
- Les images dangling (images sans tag ou inutilisées).
- Les réseaux non utilisés.
- Les volumes non utilisés.
Exemple de sortie :
Terminal window WARNING! This will remove:- all stopped containers- all dangling images- all unused networksAre you sure you want to continue? [y/N] yDeleted Containers:a9e5b1d98f9cf670fd9a76f5Deleted Images:untagged: ubuntu:latestdeleted: sha256:7e0aa2d69a15Deleted Networks:my-networkTotal reclaimed space: 2.3GB-
-a: Supprimer toutes les images inutilisĂ©esSi vous voulez Ă©galement supprimer les images qui ne sont pas associĂ©es Ă un container actif (et pas seulement les images dangling), utilisez lâoption
-aavecdocker system prune.Terminal window docker system prune -aCela supprime toutes les images inutilisĂ©es, mĂȘme si elles sont taguĂ©es mais non utilisĂ©es par un container actif.
-
-f: Forcer la suppression sans confirmationSi vous souhaitez automatiser le processus de nettoyage, vous pouvez ajouter lâoption
-fpour ne pas avoir Ă confirmer la suppression manuellement.Terminal window docker system prune -f -
--volumes: Nettoyer aussi les volumesPar défaut,
docker system prunene supprime pas les volumes inutilisĂ©s. Si vous voulez Ă©galement supprimer les volumes orphelins, ajoutez lâoption--volumes.Terminal window docker system prune --volumesAttention : Cette option supprime dĂ©finitivement tous les volumes non utilisĂ©s, ce qui peut entraĂźner la perte de donnĂ©es si des volumes importants ne sont pas attachĂ©s Ă des containers.
-
docker system info: Informations systĂšme sur DockerLa commande
docker system infofournit des informations dĂ©taillĂ©es sur lâinstallation de Docker, notamment les versions, les paramĂštres de configuration et lâĂ©tat de votre systĂšme Docker.Terminal window docker system infoExemple de sortie :
Terminal window Containers: 5Running: 2Paused: 0Stopped: 3Images: 15Server Version: 20.10.8Storage Driver: overlay2...Vous pouvez voir des informations comme :
- Le nombre total de containers (en cours dâexĂ©cution, en pause, ou arrĂȘtĂ©s).
- Le nombre dâimages locales.
- La version de Docker installée.
- Le driver de stockage utilisé.
- Des informations sur le rĂ©seau, les volumes et dâautres composants.
-
docker system events: Surveiller les événements Docker en temps réelLa commande
docker system eventsvous permet de surveiller en temps rĂ©el les Ă©vĂ©nements qui se produisent sur votre systĂšme Docker. Cela inclut les Ă©vĂ©nements liĂ©s aux containers, aux images, aux volumes et aux rĂ©seaux.Terminal window docker system eventsCette commande continue dâafficher les Ă©vĂ©nements au fur et Ă mesure quâils se produisent, ce qui en fait un outil prĂ©cieux pour le diagnostic et le suivi des actions dans un environnement Docker.
Exemple de sortie dâĂ©vĂ©nements :
Terminal window 2021-09-12T12:00:10.123456789Z container start 7c99e03b2bf4 (image=nginx, name=mynginx)2021-09-12T12:02:20.987654321Z network create my-network (id=7df1bfc4a128)2021-09-12T12:03:30.654321789Z container stop 7c99e03b2bf4 (image=nginx, name=mynginx)Vous pouvez également filtrer les événements avec des options pour ne voir que ceux liés à des types de ressources spécifiques (par exemple, containers ou réseaux).
ContrĂŽle de connaissances
Pourquoi ce contrĂŽle ?
Cet contrÎle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.
đ Le chronomĂštre commence dĂšs que vous cliquez sur DĂ©marrer le test. Vous devrez terminer lâexamen avant la fin du temps imparti.
đŻ Pour rĂ©ussir, vous devez obtenir au moins 80% de bonnes rĂ©ponses.
đĄ Je ne fournis pas directement les rĂ©ponses aux questions. Cependant, si certaines sont complexes, des pistes dâexplication pourront ĂȘtre proposĂ©es dans le guide ou aprĂšs lâexamen.
Bonne chanceâŻ! đ
Conclusion
Docker, câest bien plus quâun simple outil de conteneurisation. Câest un accĂ©lĂ©rateur de productivitĂ©, un booster de dĂ©ploiement et un garant de portabilitĂ© pour vos applications. En le maĂźtrisant, vous gagnez en efficacitĂ©, en fiabilitĂ© et en souplesse, que ce soit pour tester une app en local, dĂ©ployer en production, ou automatiser votre infrastructure.
Vous avez maintenant toutes les clés pour :
- Créer et gérer des conteneurs légers et isolés
- Construire des images optimisées et versionnées
- Nettoyer, inspecter et maintenir un environnement propre avec les bonnes commandes
Et surtout, intégrer Docker dans vos workflows DevOps.
Et ce nâest que le dĂ©but ! Combinez Docker avec Docker Compose, Docker-Swarm, Kubernetes, ou encore Ansible et Terraform pour aller encore plus loin dans lâautomatisation et lâorchestration.
Sur ce site, vous trouverez dâautres documentations ou billets de blog, permettant de progresser dans lâutilisation de Docker :
- Les volumes Docker
- Optimiser la taille des images Docker
- Scanner les vulnĂ©rabilitĂ©s de vos containers, filesystems et âŠ
- Tester votre image avec dockle
- Analyser vos Dockeriile avec Hadolint
- Pour que vos secrets le restent
- Sécuriser son utilisation
- Configurer correctement Docker
- Comment valider des images docker avec container-structure-test
FAQ - Questions Fréquemment Posées
Quâestâce quâun moteur de conteneurs (container engine) ?
Quels sont les principaux moteurs de conteneurs et leurs particularités ?
Quelles sont les bonnes pratiques pour configurer Docker en production ?
Comment sécuriser des déploiements Docker en production ?
Quels types de volumes Docker et plugins utiliser pour persister les données ?
Quelle est la différence entre une image et un conteneur ?
Comment fonctionne le systÚme de réseau Docker ?
Pourquoi utiliser Docker Compose ?
Quelle est la différence entre Docker et Kubernetes ?
Quâest-ce quâun Dockerfile et comment lâutiliser ?
Plus dâinfos
- Documentation Officiel : docker.com â