Maintenant que Docker est installé, nous allons découvrir le fonctionnement de Docker, et aborder les sujets suivants :
Docker se pilote en mode ligne de commande (CLI) ; notons qu’il existe également des clients GUI.
Le mode CLI est simple, tout commence par le mot-clé docker ; par exemple, pour obtenir la version actuelle de Docker :
docker version
ou, plus succinct :
docker --version
Le lancement d’un conteneur Docker se réalise avec la commande docker run.
Dans la commande suivante, Docker devrait vous afficher qu’il ne trouve pas l’image du nom de hello-world mais il la télécharge (pull) automatiquement sur le Docker hub :
docker run hello-world

Rappels :
Lorsqu’il est apporté des modifications à une image, seule la différence est prise en compte et placée dans la couche supérieure d'exécution du conteneur. Les modifications peuvent être sauvegardées sous la forme d'une image qui sera juste composée de la couche de différences par le moteur de Docker, définie par un identifiant unique. Ainsi, cette seule version pourra être envoyée vers le dépôt public de Docker (ou vers un dépôt privé), sans avoir à envoyer toutes les couches dans leur intégralité.
Le Docker Hub contient un très grand nombre d’images permettant d’utiliser sous forme de conteneur la plupart des outils utilisées aujourd’hui : apache, php, mysql, mariadb, haproxy, debian, ubuntu, odoo, etc.
Docker Hub comporte des dépôts officiels, mais aussi des images créées par n’importe quel utilisateur.
Il y a d'ailleurs ici un point de vigilance concernant la sécurité : lorsqu’on récupère une image, il faut toujours en vérifier son auteur, des logiciels malveillants pouvant être installés.
Pour interroger le dépôt officiel en ligne de commandes sans passer par le site web, on utilise la commande docker search, par exemple :
docker search ubuntu

La commande renvoie les résultats (limités par défaut à 25) classés par ordre décroissant de popularité.
Il est possible d’affiner cette commande. Comme pour n’importe quelle autre commande, les options sont décrites avec la commande :
docker search --help
On peut aussi de rechercher des images sur le site web https://hub.docker.com/search :

Docker permet d’ajouter un tag à une image, pour choisir une version donnée (par exemple : ubuntu:noble). Par défaut c’est la dernière image (latest) qui est téléchargée :

Téléchargeons par exemple l’image ubuntu (dans sa dernière version, option par défaut) :
docker pull ubuntu

Pour récupérer une autre version de l’image, il faut associer le nom du tag au nom de l’image. Dans l’exemple précédent, pour récupérer la version mantic, il faut utiliser la commande suivante :
docker pull ubuntu:mantic
La liste des images téléchargées localement s’obtient avec la commande :
docker images
Nous retrouvons les différentes images que nous avons récupérées jusque là :

Pour supprimer une image locale, on utilise la commande docker rmi <nom image>.
A noter que :
-f (ou --force)docker rmi hello-world
Va générer une erreur :
Error response from daemon: conflict: unable to delete hello-world:latest (must be forced) - container 0ef76548f948 is using its referenced image f7931603f70e
Par contre, cette commande va bien supprimer l'image :
docker rmi hello-world -f
On rappelle que l’image est un fichier en lecture seule, contenant lui-même un système de fichiers avec tout le nécessaire pour faire fonctionner la ou les applications. Le conteneur est le processus qui utilise l’image pour faire tourner la ou les applications.
Pour lancer (instancier est le terme exact) un conteneur, on utilise la commande :
docker run [OPTIONS] <nom image> [COMMANDE]
Selon ce que l’on veut faire, il est possible de lancer un conteneur :
[COMMANDE] est facultative : si l’on ne met rien, l’image a une commande par défaut (prévue par le concepteur de l’image)run le fait automatiquement (sans requérir un pull préalable)La commande suivante lance un conteneur (sans options et commandes spécifiques à exécuter dans le conteneur) à partir de l'image ubuntu :
docker run ubuntu
Mais rien ne semble s’être passé !...
La commande docker ps permet de lister les conteneurs en cours d’exécution :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
L’option -a sur la commande docker ps va nous permettre de visualiser également les conteneurs non actifs :
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0a5b98516c5 ubuntu "/bin/bash" 13 seconds ago Exited (0) 12 seconds ago musing_carver
0ef76548f948 f7931603f70e "/hello" 20 minutes ago Exited (0) 20 minutes ago objective_murdock
/bin/bash (le shell Bash) ; il s’agit du processus lancé par défaut, prévu par les concepteurs de l'image.--name.Si on lance de nouveau le conteneur avec la même commande docker run, ce n’est pas le même conteneur qui est exécuté mais un nouveau conteneur qui est créé :
docker run ubuntu
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6cf2f07c14fb ubuntu "/bin/bash" 1 second ago Exited (0) 1 second ago nostalgic_lichterman
e0a5b98516c5 ubuntu "/bin/bash" 48 seconds ago Exited (0) 47 seconds ago musing_carver
0ef76548f948 f7931603f70e "/hello" 21 minutes ago Exited (0) 21 minutes ago objective_murdock
Pour relancer un conteneur, Il faudra utiliser plutôt la commande docker start (mais on indiquera alors le nom du conteneur, et non le nom d’une image).
NB : on voit que la commande par défaut est pour cette image est : /bin/bash
Pour lancer un conteneur en lui faisant exécuter une commande spécifique (par exemple cat /etc/os-release) :
docker run ubuntu cat /etc/os-release
Ce qui affiche (si la version latest est comme au moment d'écrire ces lignes Noble Numbat) :
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
Avec une autre image (une version spécifique de ubuntu) :
docker run ubuntu:xenial cat /etc/os-release
Dans ce cas, l'image sera préalablement téléchargée :
Unable to find image 'ubuntu:xenial' locally
xenial: Pulling from library/ubuntu
fb15d46c38dc: Pull complete
58690f9b18fc: Pull complete
b51569e7c507: Pull complete
da8ef40b9eca: Pull complete
Digest: sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6
Status: Downloaded newer image for ubuntu:xenial
NAME="Ubuntu"
VERSION="16.04.7 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.7 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
La commande run a lancé un conteneur à partir de l'image ubuntu et a exécuté dessus la commande shell cat pour afficher le fichier de version d’Ubuntu.
Le résultat apparaît sur la sortie standard.
Evidemment, à chaque commande run, un conteneur est ajouté dans la mémoire :
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee427f974d11 ubuntu:xenial "cat /etc/os-release" 2 minutes ago Exited (0) 2 minutes ago boring_mendel
d3e42d0dcf82 ubuntu "cat /etc/os-release" 3 minutes ago Exited (0) 3 minutes ago vibrant_bohr
6cf2f07c14fb ubuntu "/bin/bash" 4 minutes ago Exited (0) 4 minutes ago nostalgic_lichterman
e0a5b98516c5 ubuntu "/bin/bash" 4 minutes ago Exited (0) 4 minutes ago musing_carver
0ef76548f948 f7931603f70e "/hello" 25 minutes ago Exited (0) 25 minutes ago objective_murdock
Nous pouvons ainsi nous retrouver très facilement avec de multiples conteneurs totalement inutiles qu’il faut supprimer.
Pour supprimer un conteneur, deux possibilités :
docker rm <id conteneur>
ou
docker rm <nom du conteneur>
Par exemple ici, pour effacer le dernier de la liste ci-dessus :
docker rm objective_murdock
Et alors :
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee427f974d11 ubuntu:xenial "cat /etc/os-release" 3 minutes ago Exited (0) 3 minutes ago boring_mendel
d3e42d0dcf82 ubuntu "cat /etc/os-release" 4 minutes ago Exited (0) 4 minutes ago vibrant_bohr
6cf2f07c14fb ubuntu "/bin/bash" 5 minutes ago Exited (0) 5 minutes ago nostalgic_lichterman
e0a5b98516c5 ubuntu "/bin/bash" 5 minutes ago Exited (0) 5 minutes ago musing_carver
NB : seul un conteneur avec un statut « exited » peut être supprimé.
La commande docker ps avec l'option -aq nous donne la liste de tous les identifiants de conteneurs en mémoire :
docker ps -aq
ee427f974d11
d3e42d0dcf82
6cf2f07c14fb
e0a5b98516c5
On récupère cette liste dans une variable avec la substitution de commande $(docker ps -aq) du shell, que l’on passe en argument à la commande docker rm, ce qui donne :
docker rm $(docker ps -aq)
ee427f974d11
d3e42d0dcf82
6cf2f07c14fb
e0a5b98516c5
Dans la même idée, il est possible de supprimer toutes les images avec :
docker rmi $(docker images -q) -f
Untagged: ubuntu:latest
Deleted: sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
Untagged: ubuntu:mantic
Deleted: sha256:fd7fe639db24c4e005643921beea92bc449aac4f4d40d60cd9ad9ab6456aec01
Untagged: ubuntu:xenial
Deleted: sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6
Si un conteneur a pour seule vocation de lancer une commande, il est inutile de le conserver sur la machine hôte ; il peut être supprimé dès qu’il a rempli sa fonction : cela peut se faire avec l’option --rm :
docker run --rm ubuntu cat /etc/os-release
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
20043066d3d5: Pull complete
06808451f0d6: Download complete
Digest: sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
Status: Downloaded newer image for ubuntu:latest
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
Mais ensuite si on lance la commande docker ps -a :
docker ps -a
aucun nouveau conteneur - même exited - n’apparaît :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
NB : tant qu’un conteneur n’est pas supprimé, son environnement est sauvegardé et il peut être relancé.
Pour relancer un conteneur déjà présent en mémoire, là aussi deux options :
docker start <id conteneur>
ou
docker start <nom du conteneur>
L’option -a de start dirige (attache) la sortie du conteneur vers la sortie standard actuelle (STDOUT et STDERR)
Exemple :
uname -a :docker run --name pascal ubuntu uname -a
uname -a) :Linux 634c00bd46f1 6.12.57+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.57-1 (2025-11-05) x86_64 x86_64 x86_64 GNU/Linux
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
634c00bd46f1 ubuntu "uname -a" 3 minutes ago Exited (0) 2 minutes ago pascal
On peut le relancer :
docker start -a pascal
La commande associée au conteneur est relancée :
Linux 634c00bd46f1 6.12.57+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.57-1 (2025-11-05) x86_64 x86_64 x86_64 GNU/Linux
On peut remarquer que le hostname est le même que le nom de conteneur (634c00bd46f1)
Nous allons désormais interagir avec le conteneur, via l’entrée et la sortie standard.
docker run --name monserveur -it ubuntu
On obtient bien un prompt shell sur le conteneur, nous sommes root sur la machine 2cd3073d5546 :
root@2cd3073d5546:/#
--name permet de nommer le conteneur pour plus de confort dans sa manipulation future.-i permet d’activer le mode interactif, qui récupère l’entrée standard (clavier).-t permet d’avoir un pseudo-terminal (tty) pour exécuter des commandes dans le conteneur une fois lancé.Il est donc possible d’interagir avec le système pour le mettre à jour par exemple et y installer les applications que l’on veut :
apt update && apt upgrade
Qui affichera quelque chose de ce genre :
Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [33.1 kB]
Get:4 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1701 kB]
Get:6 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:7 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [1182 kB]
Get:8 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
Get:9 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [2796 kB]
Get:10 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
Get:11 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
Get:12 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
...
Depuis ce shell interactif du conteneur, lancez ces quelques autres commandes :
Les dépendances de base étant absentes (l'image est ultra-minimale), les commandes ci-dessous devraient déclencher l'installation d'un nombre inhabituel de paquets supplémentaires.
apt install openssh-server
passwd
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
mkdir -p /run/sshd
Quand le travail est terminé, on sort du conteneur par la commande exit (ou CTRL D) qui sort du shell courant, et arrête le conteneur puisque celui-ci n’a pour but que de faire tourner cet unique processus : le statut du conteneur passe donc à exited :
docker ps -a
Ce qui a été fait est sauvegardé tant que le conteneur n’est pas supprimé : même s’il est arrêté, le conteneur contient tous les fichiers ajoutés.
Pour le réactiver et y accéder de nouveau en interactif :
docker start monserveur
docker attach monserveur
Ou encore:
docker start -ai monserveur
On retrouve le shell du conteneur, et son historique notamment :
root@2cd3073d5546:/# history
1 apt update && apt upgrade
2 apt install openssh-server
3 passwd
4 echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
5 mkdir -p /run/sshd
6 history
N'oubliez pas ici de sortir du shell du conteneur.
Il est possible de visualiser la (très) longue liste des modifications apportées au conteneur (commande diff) ; on prend soin de sortir du conteneur avant :
docker diff monserveur
Ici en limitant aux 20 premières lignes :

Pour voir les processus lancés dans le conteneur (qui doit être démarré) :
docker start monserveur
docker top monserveur
UID PID PPID C STIME TTY TIME CMD
root 10572 10548 20 12:50 pts/0 00:00:00 /bin/bash
Nous pouvons constater que le service ssh que nous avons installé n’est pas lancé. Et c'est très bien, car il devra être lancé d'une façon particulière (en avant-plan) afin d'être exposé par le conteneur.
La commande exec permet de lancer une commande dans un conteneur actif, avec des options identiques à la commande run, notamment :
-d de exec lance la commande en arrière-plan.-i active le mode interactif, qui récupère l’entrée standard (clavier).-t permet d’avoir un pseudo-terminal (tty) pour interagir avec la commande (associé à l’option -i)Par exemple :
docker exec monserveur date
ou encore :
docker exec -ti monserveur bash
Il existe deux méthodes pour créer des images Docker.
La première (que nous n’aborderons pas encore ici) consiste à écrire un dockerfile contenant une liste de commandes permettant de créer l’image.
La deuxième utilise la commande commit :
docker commit <nom conteneur> <nom image>
Le seul paramètre obligatoire ici est le nom ou l’identifiant du container. La commande ci-dessus n’utilise pas les nombreuses options disponibles.
IMPORTANT : la commande par défaut associée à cette nouvelle image sera la commande qui a été saisie au lancement du conteneur.
Par exemple, si on crée un conteneur toto avec cette commande :
docker run --name toto ubuntu cat /etc/os-release
et qu'on génère une image à partir de ce conteneur toto :
docker commit toto ubuntoto
Toute instanciation de l’image sans commande spécifique, comme :
docker run --rm ubuntoto
lancera la commande cat /etc/os-release
Si on veut modifier cette commande "par défaut", il faut utiliser l'option --change de commit, par exemple ici :
docker commit --change='CMD ["/usr/bin/date"]' toto ubundate
Vérifiez avec :
docker run --rm ubundate
Voilà une façon plutôt "sophistiquée" d'afficher la date, mais qui montre bien la rapidité et l'agilité des conteneurs !
Reprenons notre conteneurmonserveur pour générer une image qui exécutera un service ssh :
docker commit --change='CMD ["/usr/sbin/sshd","-D"]' monserveur ubuntu/pm:ssh
/usr/sbin/sshd -D) ; nous reviendrons plus loin sur cette syntaxe particulière de la commande.sha256:59e07399e417b52d6f09be0618d948e27210ec934bc1f2aef2c11890a558b268
L'image créée apparaît dans la liste des images actuelles du système :
docker images
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
ubundate:latest 57f86d2b59a7 117MB 29.7MB
ubuntoto:latest 4d3dd6bf66a6 117MB 29.7MB
ubuntu/pm:ssh 8800030f850b 422MB 119MB
ubuntu:latest c35e29c94501 119MB 31.7MB U
C’est cette nouvelle image (et non plus l’image téléchargée du Hub) que nous allons exploiter maintenant.
Supprimons maintenant le conteneur (après l’avoir arrêté).
docker stop monserveur
docker rm monserveur
Il peut être utile de sauvegarder une image localement à des fins d’exploitation sur un autre PC (en attendant de publier notre image sur le Hub officiel ou un autre Hub).
On utilise l’opérateur de redirection de la sortie standard > vers un fichier ; docker refusera la commande si cette redirection n’est pas faite :
docker save <image> > <nom_fichier.tar>
Par exemple :
docker save ubuntu/pm:ssh > serv_ubuntu-ssh.tar
ls -lh
total 115M
-rw-rw-r-- 1 pascal pascal 115M 9 déc. 13:29 serv_ubuntu-ssh.tar
Pour récupérer une image depuis une archive enregistrée localement :
docker load -i <nom_fichier.tar>
Par exemple :
docker load -i serv_ubuntu-ssh.tar
Avant d'aller plus loin, vérifions que nous pouvons utiliser notre image.
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
docker rmi $(docker images -q) -f
docker load -i serv_ubuntu-ssh.tar
Utilisons cette image pour lancer un serveur ssh. Le principe est ensuite de lancer le service en même temps que le conteneur, via la commande, sachant que :
-d qui permet cela.docker run -d --name srvssh ubuntu/pm:ssh
On doit observer que le conteneur est actif :
docker ps
devrait retourner :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c9d9ab82b39 ubuntu/pm:ssh "/usr/sbin/sshd -D" 46 seconds ago Up 45 seconds srvssh
Nous pouvons nous connecter en ssh sur ce conteneur, mais quelle est son ip ? On pourrait essayer avec le nom du conteneur (srvssh), mais ce n'est pas résolu ici.
Inspectons les propriétés du conteneur :
docker inspect srvssh
Cette commande fort utile nous donne de nombreuses informations, dont l'adresse IP. On peut l'extraire par cette commande plus précise :
IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' srvssh)
echo $IP
On peut maintenant se connecter en ssh sur le conteneur :
ssh root@$IP
Autre commande utile pour le débogage, notamment si la création du conteneur se passe mal et si l’accès en ssh n’est pas possible (cette commande ne renvoie rien si tout se passe bien).
docker logs srvssh
Pour rendre le service fourni par un conteneur accessible, il faut tout d'abords que ce conteneur soit lancé en arrière-plan.
Docker utilise ensuite (par défaut) la technique classique du mappage de port : un port de l’hôte va être redirigé vers un port du container (nat masquerading).
Docker dispose pour cela d’une interface réseau spécifique docker0 sur la machine hôte :
ip -4 a

Les conteneurs en cours de fonctionnement sur notre système auront une (ou plusieurs) interfaces réseau dans 172.17.0.0/16, qui est appelé le réseau bridge de Docker.
Un routage (natté) est en place - géré par Docker - entre ce réseau bridge et le LAN.
L’interface docker0 de la machine hôte est donc le lien avec le réseau bridge de Docker. Pour obtenir des infos sur ce réseau, et notamment les conteneurs connectés dedans, on utilise la commande network inspect :
docker network inspect bridge
Voici une représentation du réseau interne du Docker Engine :

Le service ssh du conteneur que nous venons d'instancier n'est visible que depuis le serveur Docker lui-même. Pour exposer un conteneur dans le réseau local, on utilise la syntaxe suivante :
docker run -d -p <@IP:port-hôte:port-conteneur> --name <nom conteneur> <image> COMMANDE
Le paramètre permettant le mappage est -p <IP:port-hôte:port-container> :
Relançons une nouvelle instance de notre conteneur ssh, mais avec une exposition du service sur le port 2222 :
docker run -d -p 2222:22 --name srvssh2 ubuntu/pm:ssh
Puis regardons les conteneurs actifs :
docker ps
On obtient :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b98c96674ab7 ubuntu/pm:ssh "/usr/sbin/sshd -D" 39 seconds ago Up 39 seconds 0.0.0.0:2222->22/tcp, [::]:2222->22/tcp srvssh2
2c9d9ab82b39 ubuntu/pm:ssh "/usr/sbin/sshd -D" 6 minutes ago Up 6 minutes srvssh
Regardons bien la rubrique PORTS pour
srvssh2ci-dessus : on n'a pas précisé l’adresse IP dans le paramètre-p, le port tcp/2222 est donc ouvert sur toutes les interfaces de la machine hôte, en IPv4 (0.0.0.0) et en IPv6 [::].
Voici le schéma de l'exposition du service ssh du conteneur depuis le réseau local de l'hôte (le serveur Docker ayant ici l'adresse 192.168.68.111 dans le réseau local) :

On peut maintenant accéder au conteneur en ssh sur le port 2222 à partir de n’importe quel hôte sur le même LAN que le serveur Docker.
L’adresse IP est celle du serveur Docker, et dépend bien sûr de votre environnement.
ssh root@192.168.68.111 -p 2222

Nous disposons bien du shell sur notre conteneur actif.
Voilà donc terminée cette première phase d'approche des conteneurs avec Docker. Nous avons pu récupérer des images, lancer des conteneurs, modifier et sauvegarder des images, et exposer un conteneur au travers du réseau Docker.
Il reste bien des choses à explorer, comme la gestion des volumes, les liaisons, les variables d'environnement ou encore le déploiement avancé avec dockerfile ou Docker Compose.
