Découvrez notre tutoriel Docker : nous vous ex­pli­quons comment la pla­te­forme de vir­tua­li­sa­tion Docker fonc­tionne et nous vous montrons comment l’utiliser sur votre système Ubuntu 22.04 à l’aide d’ins­truc­tions faciles à suivre.

Docker : structure et fonctions

« Build, Ship and Run Any App, Anywhere » : c’est sous cette devise que la pla­te­forme de con­te­neurs open source Docker promeut une al­ter­na­tive flexible et économe en res­sources à l’émulation de com­po­sants matériels sur la base de machines vir­tuelles (VM). Alors que la vir­tua­li­sa­tion ma­té­rielle classique repose sur le lancement de plusieurs systèmes invités sur un système hôte commun, Docker utilise des con­te­neurs pour exécuter des ap­pli­ca­tions en tant que processus isolés sur un seul et même système. C’est pourquoi la vir­tua­li­sa­tion de serveur basée sur des con­te­neurs est également appelée vir­tua­li­sa­tion du système d’ex­ploi­ta­tion.

Image: Comparaison entre les machines virtuelles et les conteneurs Docker
Alors que chaque machine virtuelle démarre son propre système d’ex­ploi­ta­tion, les con­te­neurs Docker partagent le noyau du système hôte.

Le principal avantage de la vir­tua­li­sa­tion basée sur les con­te­neurs réside dans la pos­si­bi­lité d’exécuter des ap­pli­ca­tions avec des exigences dif­fé­rentes de manière isolée les unes des autres, sans supporter les frais généraux d’un système invité séparé. De plus, les ap­pli­ca­tions peuvent être déployées avec des con­te­neurs sur diverses pla­te­formes et in­fras­truc­tures, sans né­ces­si­ter d’adap­ta­tion aux con­fi­gu­ra­tions ma­té­rielles ou lo­gi­cielles du système hôte. Docker est le projet logiciel le plus connu qui met à la dis­po­si­tion des uti­li­sa­teurs une tech­no­lo­gie de vir­tua­li­sa­tion basée sur des con­te­neurs. La pla­te­forme open source s’appuie sur trois com­po­sants de base : pour exécuter des con­te­neurs, les uti­li­sa­teurs n’ont besoin que du moteur Docker et d’images Docker spéciales, qu’ils peuvent obtenir ou créer eux-mêmes via le Hub Docker.

Conseil

Les con­te­neurs et les images Docker sont la plupart du temps gé­né­riques, mais peuvent aussi être per­son­na­li­sés selon les besoins. Vous trouverez plus d’in­for­ma­tions dans notre article sur les con­te­neurs Docker.

Les images Docker

Comme les machines vir­tuelles, les con­te­neurs Docker sont basés sur des images Docker. Une image est un modèle en lecture seule qui contient toutes les ins­truc­tions dont le moteur Docker a besoin pour créer un conteneur. Comme image portable d’un conteneur, une image Docker est décrite sous la forme d’un fichier texte ; on parle alors de Do­cker­file. Si un conteneur doit être démarré sur un système, un paquet avec l’image cor­res­pon­dante est d’abord chargé (si celle-ci n’est pas déjà dis­po­nible lo­ca­le­ment). L’image chargée met à dis­po­si­tion le système de fichiers né­ces­saire pour l’exécution, y compris tous les pa­ra­mètres. Un conteneur peut être considéré comme un processus en cours d’exécution d’une image.

Le hub Docker

Le hub Docker est un registre de ré­fé­ren­tiels de logiciels basé sur le Cloud ; cela fonc­tionne en quelque sorte comme une bi­blio­thèque pour les images Docker. Le service en ligne se divise en une zone publique et une zone privée. Le domaine public offre aux uti­li­sa­teurs la pos­si­bi­lité de té­lé­char­ger des images dé­ve­lop­pées par eux-mêmes et de les partager avec la com­mu­nauté. Une série d’images of­fi­cielles de l’équipe de dé­ve­lop­pe­ment Docker et de projets open source établis y sont également dis­po­nibles. Les images té­lé­char­gées dans une zone privée du registre ne sont pas ac­ces­sibles au public et peuvent ainsi être partagées, par exemple, au sein d’une en­tre­prise ou dans le cercle d’amis et de con­nais­sances. Vous pouvez accéder au hub Docker à l’adresse hub.docker.com.

Le moteur Docker

Le cœur du projet est le moteur Docker. Il s’agit d’une ap­pli­ca­tion client-serveur ouverte à tous, dont la version actuelle est dis­po­nible pour les uti­li­sa­teurs sur toutes les pla­te­formes établies.

Le moteur Docker est composé de trois éléments fon­da­men­taux : tout d’abord, un daemon doté de fonctions de serveur, ensuite une interface de pro­gram­ma­tion (API) basée sur le principe de pro­gram­ma­tion REST (Re­pre­sen­ta­tio­nal State Transfer), et enfin, le terminal du système d’ex­ploi­ta­tion (Command-Line Interface, CLI), servant d’interface uti­li­sa­teur (client).

  • Le daemon Docker : le moteur Docker utilise un processus de daemon comme serveur. Le daemon Docker fonc­tionne en arrière-plan sur le système hôte et sert à la commande centrale du moteur Docker. Dans cette fonction, il crée et gère toutes les images, con­te­neurs ou réseaux.
  • L’API REST : l’API REST spécifie une série d’in­ter­faces qui per­met­tent à d’autres pro­grammes de com­mu­ni­quer avec le daemon Docker et de lui donner des ins­truc­tions. L’un de ces pro­grammes est le terminal du système d’ex­ploi­ta­tion.
  • Le terminal : en tant que programme client, Docker utilise le terminal du système d’ex­ploi­ta­tion. Celui-ci interagit avec le daemon Docker via l’API REST et permet aux uti­li­sa­teurs de le contrôler par le biais de scripts ou d’entrées uti­li­sa­teur.
Conseil

En 2017, le moteur Docker a été rebaptisé Docker Community Edition (abrégé en Docker CE), mais l’ancien nom est encore utilisé dans la do­cu­men­ta­tion of­fi­cielle et dans les ré­fé­ren­tiels Docker. En plus de Docker CE, il existe également Docker En­ter­prise Edition (Docker EE), qui dispose de quelques fonc­tion­na­li­tés haut de gamme. Celle-ci n’est toutefois pas gratuite et convient plutôt aux en­tre­prises.

Avec les commandes Docker, les uti­li­sa­teurs peuvent démarrer, arrêter et gérer des con­te­neurs logiciels di­rec­te­ment depuis le terminal. On s’adresse au daemon via la commande docker et des ins­truc­tions telles que build (créer), pull (té­lé­char­ger) ou run (démarrer). Le client et le serveur peuvent se trouver sur le même système. Les uti­li­sa­teurs ont également la pos­si­bi­lité de s’adresser à un daemon Docker sur un autre système. Selon le type de connexion à établir, la com­mu­ni­ca­tion entre le client et le serveur se fait via l’API REST, via des sockets UNIX ou via une interface réseau.

Le graphique suivant illustre l’in­te­rac­tion des dif­fé­rents com­po­sants de Docker à l’exemple des commandes docker build, docker pull et docker run :

Image: Schéma de l’architecture Docker
L’ar­chi­tec­ture Docker est basée sur une in­te­rac­tion entre le client (terminal

La commande docker build indique au daemon Docker de créer une image (ligne poin­til­lée). Pour cela, un Do­cker­file cor­res­pon­dant doit être dis­po­nible. Si l’image ne doit pas être créée par l’uti­li­sa­teur, mais chargée à partir d’un ré­fé­ren­tiel dans le hub Docker, la commande docker pull est utilisée (ligne poin­til­lée). Si le daemon Docker reçoit l’ins­truc­tion de démarrer un conteneur via docker run, le programme d’arrière-plan vérifie d’abord si l’image du conteneur cor­res­pon­dant est dis­po­nible lo­ca­le­ment. Si c’est le cas, le conteneur est exécuté (ligne continue). Si le daemon ne peut pas trouver l’image, il lance au­to­ma­ti­que­ment une opération de pulling à partir du ré­fé­ren­tiel.

Serveurs dédiés
Per­for­mance et in­no­va­tion
  • Pro­ces­seurs dernière gé­né­ra­tion
  • Hardware dédié haute per­for­mance
  • Data centers certifiés ISO

Tra­vail­ler avec Docker

Il est main­te­nant temps de se fa­mi­lia­ri­ser avec les ap­pli­ca­tions de la pla­te­forme de con­te­neurs. Si vous n’avez pas encore installé le moteur Docker, vous pouvez le faire via le terminal Linux. Vous trouverez des ins­truc­tions à ce sujet dans notre article « Installer Docker sur Ubuntu 22.04 ». Apprenez ci-dessous comment contrôler le moteur Docker via le terminal, quelles sont les pos­si­bi­li­tés offertes par le hub Docker et pourquoi les con­te­neurs Docker pour­raient ré­vo­lu­tion­ner le trai­te­ment des ap­pli­ca­tions.

Conseil

Si vous souhaitez installer Docker sur une autre dis­tri­bu­tion Linux ou Windows, les articles suivants sont à votre dis­po­si­tion :

Gérer le moteur Docker

Depuis la version 16.04, Ubuntu utilise le programme d’arrière-plan systemd(abré­via­tion de “System-Daemon”) pour gérer les processus.systemdest un processus init qui est également utilisé dans d’autres dis­tri­bu­tions Linux comme RHEL, CentOS ou Fedora. En règle générale,systemdreçoit l’ID de processus 1. En tant que premier processus du système, le daemon est res­pon­sable du démarrage, de la sur­veil­lance et de l’arrêt de tous les processus suivants. Dans les versions an­té­rieures d’Ubuntu (14.10 et plus anciennes), c’est le programme d’arrière-planupstart qui assume cette fonction.

Le daemon Docker peut également être contrôlé via systemd. Dans l’ins­tal­la­tion standard, la pla­te­forme de con­te­neurs est con­fi­gu­rée de telle sorte que le daemon démarre au­to­ma­ti­que­ment avec le démarrage du système. Ce réglage par défaut peut être adapté in­di­vi­duel­le­ment via l’outil de ligne de commande systemctl.

Avec systemctl, vous envoyez des commandes à systemd pour contrôler un processus ou demander son état. La syntaxe d’une telle commande se présente ainsi :

systemctl [OPTION] [COMMANDE]
bash

Certaines commandes se réfèrent à des res­sources spé­ci­fiques. Dans la ter­mi­no­lo­gie de systemd, celles-ci sont appelées « units ». Dans ce cas, la commande résulte de l’ins­truc­tion cor­res­pon­dante et du nom de l’unit à laquelle on veut s’adresser.

Si vous souhaitez activer (enable) ou dé­sac­ti­ver (disable) le démarrage au­to­ma­tique du daemon Docker, utilisez l’outil en ligne de commande systemctl avec les commandes suivantes :

sudo systemctl enable docker
sudo systemctl disable docker
bash

L’outil de ligne de commande systemctl vous permet également d’in­ter­ro­ger le statut d’une unit :

sudo systemctl status docker
bash

Si le moteur Docker est actif sur votre système Ubuntu, la sortie dans le terminal devrait cor­res­pondre à celle de la capture d’écran suivante :

Image: systemctl montre que le moteur Docker est actif (running)
systemctl montre que le moteur Docker est actif (running).

Si votre moteur Docker est désactivé à ce moment-là, vous obtenez l’in­di­ca­tion de statut inactive (dead). Dans ce cas, démarrez ma­nuel­le­ment le daemon Docker pour exécuter les con­te­neurs.

Image: systemctl montre que le moteur Docker est inactif (dead)
systemctl montre que le moteur Docker est inactif (dead).

Si vous souhaitez démarrer, arrêter ou re­dé­mar­rer ma­nuel­le­ment votre moteur Docker, adressez-vous à systemd avec l’une des commandes suivantes.

Pour démarrer le daemon désactivé, utilisez systemctl en com­bi­nai­son avec la commande start :

sudo systemctl start docker
bash

Si le daemon Docker doit être arrêté, la commande stop est utilisée :

sudo systemctl stop docker
bash

Pour re­dé­mar­rer le moteur, utilisez la commande restart :

sudo systemctl restart docker
bash

Comment utiliser le hub Docker ?

Si le moteur Docker est le cœur de la pla­te­forme de con­te­neurs, le hub Docker est l’âme du projet open source, car c’est ici que la com­mu­nauté se réunit. Les uti­li­sa­teurs trouvent dans ce registre basé sur le Cloud tout ce dont ils ont besoin pour donner vie à leur ins­tal­la­tion Docker.

Le service en ligne propose divers ré­fé­ren­tiels officiels avec plus de 100 000 ap­pli­ca­tions gratuites. Les uti­li­sa­teurs ont la pos­si­bi­lité de créer leurs propres archives d’images et de les partager avec des groupes de travail. En plus d’une as­sis­tance pro­fes­sion­nelle offerte par l’équipe de dé­ve­lop­pe­ment, les débutants peuvent également rejoindre la com­mu­nauté des uti­li­sa­teurs. Un forum pour le support de la com­mu­nauté est dis­po­nible via GitHub.

Image: Le hub Docker : zone de connexion
Vous créez votre ID Docker personnel gra­tui­te­ment lorsque vous vous inscrivez. / Source : hub.docker.com

Ins­crip­tion au hub Docker

L’ins­crip­tion au hub Docker est gratuite. Les uti­li­sa­teurs ont seulement besoin d’une adresse email et de l’ID Docker qu’ils ont eux-mêmes choisi. Celui-ci fonc­tion­nera plus tard comme espace de noms de ré­fé­ren­tiels personnel et permettra aux uti­li­sa­teurs d’accéder à tous les services Docker. Ac­tuel­le­ment, l’offre comprend donc le hub Docker, le Cloud Docker, le store Docker et certains pro­grammes bêta. De plus, le Docker-ID permet de se connecter au centre de support Docker, ainsi qu’au portail Docker-Success et aux forums Docker.

Le processus d’ins­crip­tion se déroule en cinq étapes :

  1. Choisir un ID Docker : pour s’inscrire, vous choi­sis­sez un nom d’uti­li­sa­teur qui deviendra ensuite votre ID Docker.
  2. Indiquer l’adresse email : saisissez votre adresse email actuelle. Notez que vous devez confirmer les ins­crip­tions au hub Docker par email.
  3. Définir un mot de passe : choi­sis­sez un mot de passe con­fi­den­tiel.
  4. Envoyer l’ins­crip­tion : cliquez sur « Sign up » pour soumettre votre ins­crip­tion. Si toutes les données ont été trans­mises, Docker enverra un lien de vé­ri­fi­ca­tion de votre adresse email à la boîte postale que vous avez indiquée.
  5. Confirmer l’adresse email : confirmez votre adresse email en cliquant sur le lien de vé­ri­fi­ca­tion.

Les services en ligne du projet Docker sont à votre dis­po­si­tion im­mé­dia­te­ment après l’en­re­gis­tre­ment en ligne. Vous pouvez désormais créer des ré­fé­ren­tiels et des groupes de travail ou re­cher­cher des res­sources publiques dans le hub Docker via la fonction « Explore ».

Image: Le tableau de bord du hub Docker
Le tableau de bord du hub Docker permet de gérer les ré­fé­ren­tiels et les groupes de travail. / Source : hub.docker.com

Al­ter­na­ti­ve­ment, vous pouvez également vous connecter via docker login di­rec­te­ment depuis le terminal de votre système d’ex­ploi­ta­tion. Vous trouverez une des­crip­tion détaillée de cette commande dans la do­cu­men­ta­tion Docker.

En principe, le hub Docker est à votre dis­po­si­tion même sans compte et ID Docker. Mais dans ce cas, seules les images des ré­fé­ren­tiels publics peuvent être chargées. Il n’est pas possible de té­lé­char­ger ses propres images sans ID Docker.

Créer des ré­fé­ren­tiels dans le hub Docker

Le compte gratuit du hub Docker comprend un ré­fé­ren­tiel privé et vous offre la pos­si­bi­lité de créer autant de ré­fé­ren­tiels publics que vous le souhaitez. Si vous avez besoin d’autres ré­fé­ren­tiels privés, vous pouvez les débloquer avec une mise à niveau payante.

Pour créer un ré­fé­ren­tiel, procédez comme suit :

  1. Sé­lec­tion­ner les na­mes­paces : les ré­fé­ren­tiels nou­vel­le­ment créés sont au­to­ma­ti­que­ment attribués au namespace de votre ID Docker. Vous avez également la pos­si­bi­lité d’indiquer l’ID d’une or­ga­ni­sa­tion à laquelle vous ap­par­te­nez.
  2. Nommer le ré­fé­ren­tiel : indiquez un nom pour le ré­fé­ren­tiel nou­vel­le­ment créé.
  3. Ajouter une des­crip­tion : ajoutez une des­crip­tion pour votre ré­fé­ren­tiel.
  4. Con­fi­gu­rer la vi­si­bi­lité : décidez si le ré­fé­ren­tiel doit être visible pu­bli­que­ment (public) ou uni­que­ment ac­ces­sible à vous ou à votre or­ga­ni­sa­tion (private).

Confirmez vos données en cliquant sur « Create ».

Image: Le hub Docker : fenêtre pour la création d’un référentiel
Vos ré­fé­ren­tiels sont au­to­ma­ti­que­ment créés dans le namespace de votre ID Docker. / Source : hub.docker.com

Créer des groupes de travail et des or­ga­ni­sa­tions

Avec le Hub, Docker vous offre une pla­te­forme basée sur le Cloud sur laquelle vous pouvez gérer de manière cen­tra­li­sée les images que vous avez créées et les partager fa­ci­le­ment avec des groupes de travail. Dans la ter­mi­no­lo­gie Docker, ces derniers sont appelés « or­ga­ni­sa­tions ». Tout comme les comptes uti­li­sa­teurs, les or­ga­ni­sa­tions reçoivent des iden­ti­fiants in­di­vi­duels qui leur per­met­tent de mettre à dis­po­si­tion et de té­lé­char­ger des images. Les droits et les rôles au sein d’une or­ga­ni­sa­tion peuvent être attribués par le biais d’équipes. Par exemple, seuls les uti­li­sa­teurs affectés au groupe « Owners » sont autorisés à créer des ré­fé­ren­tiels privés ou publics et à attribuer des droits d’accès.

Vous pouvez également créer et gérer des groupes de travail di­rec­te­ment via le tableau de bord. Vous trouverez plus d’in­for­ma­tions sur l’uti­li­sa­tion des or­ga­ni­sa­tions et des groupes de travail dans la do­cu­men­ta­tion Docker.

Comment tra­vail­ler avec des images et des con­te­neurs ?

En tant que premier point de contact pour les res­sources of­fi­cielles de Docker, le hub Docker constitue le point de départ pour utiliser des images et des con­te­neurs. L’équipe de dé­ve­lop­pe­ment y met notamment à dis­po­si­tion l’image de dé­mons­tra­tion whalesay, qui servira de base au tutoriel Docker suivant.

Té­lé­char­ger les images Docker

Vous trouverez l’image whalesay en vous rendant sur la page d’accueil du hub Docker et en sai­sis­sant le terme whalesay dans la barre de recherche située à droite du logo Docker.

Image: La fonction de recherche dans le hub Docker
Explorez le hub Docker en utilisant la barre de recherche ou le bouton « Explore ». / Source : hub.docker.com

Dans les résultats de la recherche, cliquez sur la ressource nommée docker/whalesay pour accéder au ré­fé­ren­tiel public de cette image.

Les ré­fé­ren­tiels Docker sont toujours struc­tu­rés selon le même modèle : dans l’en-tête de la page, les uti­li­sa­teurs trouvent la dé­sig­na­tion de l’image, la catégorie du ré­fé­ren­tiel ainsi que la date du dernier té­lé­char­ge­ment (last pushed).

Image: Référentiel Docker
Dans le ré­fé­ren­tiel, les uti­li­sa­teurs trouvent gé­né­ra­le­ment toutes les in­for­ma­tions né­ces­saires à l’uti­li­sa­tion de l’image. / Source : hub.docker.com

De plus, chaque ré­fé­ren­tiel Docker propose les zones d’in­for­ma­tion suivantes :

  • Des­crip­tion : des­crip­tion détaillée, en général avec mode d’emploi
  • Docker Pull Command : ligne de commande pour té­lé­char­ger l’image du ré­fé­ren­tiel (pull)
  • Owner : in­for­ma­tion sur le créateur du ré­fé­ren­tiel
  • Comments : zone de com­men­taires en bas de page

Les zones d’in­for­ma­tion du ré­fé­ren­tiel indiquent que whalesay est une mo­di­fi­ca­tion du script Perl open source cowsay. Dans sa forme originale, le programme développé par Tony Monroe en 1999 génère un graphique ASCII sous la forme d’une vache, qui apparaît avec un message dans le terminal de l’uti­li­sa­teur.

Pour té­lé­char­ger docker/whalesay, utilisez la commande docker pull selon le schéma de base suivant :

docker pull [OPTIONS] NAME [:TAG|@DIGEST]
bash

La commande docker pull indique au daemon de charger une image depuis le ré­fé­ren­tiel. Vous dé­ter­mi­nez de quelle image il s’agit en indiquant le nom de l’image (NAME). De plus, vous pouvez indiquer à Docker comment la commande souhaitée doit être exécutée (OPTIONS). Il est également fa­cul­ta­tif d’indiquer des tags (:TAG) et des numéros d’iden­ti­fi­ca­tion uniques (@DIGEST), qui per­met­tent de té­lé­char­ger une version spé­ci­fique d’une image.

Vous pouvez ainsi obtenir une copie locale de l’image docker/whalesay en utilisant la commande suivante :

docker pull docker/whalesay
bash

En règle générale, vous pouvez toutefois ignorer cette étape. Si vous souhaitez démarrer un conteneur, le daemon Docker té­lé­charge au­to­ma­ti­que­ment les images qu’il ne peut pas trouver sur le système local à partir du ré­fé­ren­tiel.

Exécuter des images Docker en tant que conteneur

Pour exécuter une image Docker, utilisez la commande docker run :

docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG…]
bash

Le seul élément obli­ga­toire de la commande docker run est le nom de l’image Docker souhaitée. Même si vous lancez des con­te­neurs, vous avez la pos­si­bi­lité de définir des options fa­cul­ta­tives, des TAGs et des DIGESTs. De plus, la commande docker run peut être combinée avec d’autres commandes qui seront exécutées dès que le conteneur démarre. Dans ce cas, la commande CMD (pour COMMAND : une commande qui est exécutée au­to­ma­ti­que­ment au démarrage du conteneur) définie par le créateur de l’image est remplacée. D’autres con­fi­gu­ra­tions op­tion­nelles peuvent être définies par des arguments sup­plé­men­taires (ARG…). Ceux-ci per­met­tent par exemple d’ajouter des uti­li­sa­teurs ou de trans­mettre des variables d’en­vi­ron­ne­ment.

Pour té­lé­char­ger le script Perl dis­po­nible sous forme d’image et l’exécuter dans un conteneur, utilisez la ligne de commande suivante :

docker run docker/whalesay cowsay boo
bash

Vous cons­ta­te­rez que whalesay diffère du script d’origine sur un point essentiel.

Image: Sortie terminal du conteneur docker/whalesay : la baleine annonce « boo »
Si « docker/whalesay » est exécuté avec la commande standard, la baleine Docker trans­met­tra un bref « boo ».

Si l’image docker/whalesay est exécutée, le script affiche un graphique ASCII sous la forme d’une baleine ainsi que le message « boo » dans le terminal.

Comme lors du test, le daemon recherche d’abord l’image souhaitée dans le ré­per­toire de fichiers local. Comme aucun paquet du même nom ne s’y trouve, un pulling est lancé à partir du ré­fé­ren­tiel Docker. Ensuite, le daemon démarre le programme cowsay modifié. Une fois le programme terminé, le conteneur est au­to­ma­ti­que­ment fermé.

Comme cowsay, whalesay de Docker vous offre la pos­si­bi­lité d’in­ter­ve­nir dans le dé­rou­le­ment du programme afin de modifier la sortie de texte dans le terminal. Testez cette fonction en rem­pla­çant le « boo » de la commande de sortie par une chaîne de ca­rac­tères de votre choix, par exemple par une blague nulle sur les baleines !

sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?
bash
Image: Sortie du terminal du conteneur docker/whalesay : une baleine avec un message personnalisé
Faites dire à votre baleine docker ce que vous voulez !

Afficher toutes les images Docker sur votre système local

Si vous n’êtes pas sûr d’avoir déjà té­lé­chargé une certaine image, vous pouvez afficher une vue d’ensemble de toutes les images sur votre système local. Pour cela, utilisez la ligne de commande suivante :

sudo docker images
bash

La commande docker images vous permet de consulter toutes les images locales, y compris la taille du fichier, le tag et l’ID de l’image.

Image: Aperçu de toutes les images sur le système local
L’aperçu montre les images « hello-world » et « docker/whalesay ».

Lorsque vous lancez un conteneur, l’image sous-jacente est té­lé­char­gée sous forme de copie depuis le ré­fé­ren­tiel et est en­re­gis­trée de manière per­ma­nente sur votre or­di­na­teur. Vous gagnez ainsi du temps si vous souhaitez par la suite à nouveau accéder à l’image en question. Un nouveau té­lé­char­ge­ment n’est initié que si la source de l’image change, par exemple si une version plus récente est dis­po­nible dans le ré­fé­ren­tiel.

Afficher tous les con­te­neurs sur le système local

Si vous souhaitez obtenir une vue d’ensemble de tous les con­te­neurs qui sont exécutés sur votre système ou qui l’ont été par le passé, utilisez la ligne de commande docker ps en com­bi­nai­son avec l’option --all (raccourci : -a) :

sudo docker ps -a
bash
Image: Aperçu de tous les conteneurs sur le système local
L’aperçu montre tous les con­te­neurs qui ont été lancés sur le moteur Docker.

La sortie du terminal comprend des in­for­ma­tions telles que l’ID du conteneur, l’image sous-jacente, la commande qui a été exécutée lors du démarrage du conteneur, le moment où le conteneur a été démarré, ainsi que son statut actuel.

Si vous souhaitez uni­que­ment afficher les con­te­neurs en cours d’exécution sur votre système, utilisez sim­ple­ment la ligne de commande docker ps :

sudo docker ps
bash

Cependant, il ne devrait pas y avoir de con­te­neurs en cours d’exécution sur votre système pour le moment.

Créer des images Docker

Vous savez main­te­nant comment trouver des images dans le hub Docker, les té­lé­char­ger et les exécuter sur n’importe quel système sur lequel le moteur Docker a été installé. Avec Docker, vous ne disposez toutefois pas seulement de la vaste offre d’ap­pli­ca­tions du registre. La pla­te­forme vous offre de vastes pos­si­bi­li­tés de créer vos propres images et de les partager avec d’autres dé­ve­lop­peurs.

Vous avez déjà appris dans les chapitres d’in­tro­duc­tion de ce tutoriel Docker que chaque image est basée sur un Do­cker­file. Vous pouvez vous re­pré­sen­ter les do­cker­files comme une sorte de manuel de cons­truc­tion. Il s’agit de simples fichiers texte qui con­tien­nent toutes les ins­truc­tions né­ces­saires à Docker pour créer une image. Apprenez dans les étapes suivantes comment créer un tel document et comment demander à Docker de l’utiliser comme base.

  1. Créer un nouveau ré­per­toire : l’équipe de dé­ve­lop­pe­ment de Docker re­com­mande de créer un ré­per­toire séparé pour chaque fichier Docker. Sous Linux, vous créez fa­ci­le­ment des ré­per­toires via le terminal. Utilisez la commande suivante pour créer un ré­per­toire nommé my­do­cker­build :
mkdir mydockerbuild
bash
Image: Terminal Ubuntu : la commande mkdir
Pour créer de nouveaux ré­per­toires, utilisez la commande « mkdir ».
  1. Ouvrir le nouveau ré­per­toire : utilisez la commande cd pour naviguer vers le nouveau ré­per­toire de travail créé.
cd mydockerbuild
bash
Image: Terminal Ubuntu : la commande cd
Utilisez la commande « cd » pour changer de ré­per­toire de travail.
  1. Créer un nouveau fichier texte : sous Ubuntu, vous pouvez également créer fa­ci­le­ment des fichiers texte via le terminal. Utilisez pour cela un éditeur comme Nano ou Vim. Créez un fichier texte nommé Do­cker­file dans le ré­per­toire my­do­cker­build.
nano Dockerfile
bash
Image: Terminal Ubuntu : créer des fichiers texte avec Nano
L’éditeur de texte Nano est préins­tallé sur toutes les versions d’Ubuntu.
  1. Rédiger un do­cker­file : le fichier texte nou­vel­le­ment créé sert de plan de cons­truc­tion pour l’image que vous avez dé­ve­lop­pée vous-même. Au lieu de pro­gram­mer l’image à partir de zéro, nous utilisons dans ce tutoriel Docker l’image de dé­mons­tra­tion docker/whalesay comme modèle. Vous l’intégrez dans votre fichier Docker à l’aide de la commande FROM. Utilisez le tag :latest, pour faire référence à la dernière version de l’image.
FROM docker/whalesay:latest

Jusqu’à présent, docker/whalesay fonc­tionne de la manière suivante : vous devez mettre les mots dans la bouche de la baleine. Le texte qui apparaît dans le terminal est exac­te­ment celui que vous avez saisi au­pa­ra­vant en com­bi­nai­son avec la commande de lancement du conteneur. Il serait toutefois plus in­té­res­sant que le script au­to­ma­tique génère toujours de nouvelles sorties de texte. Cela peut être réalisé par exemple à l’aide du programme fortunes, qui est dis­po­nible sur chaque système Linux. La fonction de base du programme est de générer des dictons de fortune cookies et d’autres messages hu­mo­ris­tiques. Utilisez la commande suivante pour mettre à jour votre index local de paquets et installer fortunes :

RUN apt-get -y update && apt-get install -y fortunes

Ensuite, vous pouvez définir une ins­truc­tion CMD. Celle-ci sera exécutée après la commande RUN, à condition qu’elle n’ait pas été écrasée lors de l’appel (docker run image CMD). Utilisez la commande suivante pour exécuter le programme fortunes avec l’option -a et afficher la sortie dans le terminal via le programme cowsay :

CMD /usr/games/fortune -a | cowsay

Votre fichier docker devrait main­te­nant res­sem­bler à ceci :

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

Veuillez noter que les commandes dans un fichier Docker sont toujours sur une seule ligne et com­men­cent toujours par un mot-clé. Il importe cependant peu que vous mettiez des ma­jus­cules ou des mi­nus­cules. Il s’est toutefois établi que les mots clés sont sys­té­ma­ti­que­ment écrits en ma­jus­cules.

Image: L’éditeur de texte Nano dans le terminal Ubuntu
Vous pouvez contrôler l’éditeur de texte Nano à l’aide des rac­cour­cis clavier indiqués en bas de la page.
  1. En­re­gis­trer le fichier texte : si vous utilisez l’éditeur Nano, utilisez la com­bi­nai­son de touches [CTRL] + [O] et confirmez avec [ENTER] pour en­re­gis­trer. Nano vous informe ensuite que trois lignes ont été écrites dans le fichier sé­lec­tionné. Quittez l’éditeur de texte avec la com­bi­nai­son de touches [CTRL] + [X].

  2. Créer une image à partir d’un fichier Docker : pour créer une image à partir d’un fichier Docker, rendez-vous d’abord dans le ré­per­toire où vous avez placé le fichier texte. Démarrez ensuite la création de l’image avec la ligne de commande docker build. Si vous souhaitez donner un nom in­di­vi­duel à l’image ou lui attribuer un tag, utilisez l’option -t ainsi que la com­bi­nai­son souhaitée de nom et de tag (ex : name:tag).

Dans l’exemple actuel, une image doit être créée avec le nom docker-whale :

docker build -t docker-whale .
bash

Le point final indique que le fichier Docker se trouve dans le ré­per­toire sé­lec­tionné. Vous avez également la pos­si­bi­lité d’indiquer un chemin de fichier ou une URL vers les fichiers sources.

Le processus build démarre dès que vous avez confirmé la commande avec [ENTER]. Le daemon Docker vérifie tout d’abord qu’il dispose de tous les fichiers né­ces­saires à la création de l’image. Dans la ter­mi­no­lo­gie Docker, ceux-ci sont regroupés sous le terme « Context ». L’image docker/whalesay est ensuite localisée avec le tag :latest. Une fois que le daemon Docker vérifie que tous les fichiers né­ces­saires sont présents pour créer l’image, il procède à la cons­truc­tion de l’image : pour ce faire, il démarre le modèle d’image spécifié par l’ins­truc­tion FROM dans un conteneur tem­po­raire, puis exécute la commande suivante dans le Do­cker­file. Dans l’exemple donné, il s’agit de la commande RUN, qui entraîne l’ins­tal­la­tion du programme fortunes.

À la fin de chaque étape dans le cadre de la création d’une image, Docker vous donne un ID pour la couche (layer) cor­res­pon­dante qui a été créée. La règle est la suivante : chaque ligne du fichier Docker cor­res­pond à une couche de l’image cons­truite.

Successfully built a8f2048c9ab8
Image: Terminal Ubuntu : pendant la création de l’image Docker
Les images Docker sont créées sur plusieurs couches (layers

Vous trouverez l’image que vous venez de créer sous le nom docker-whale dans l’aperçu de vos images en­re­gis­trées lo­ca­le­ment.

sudo docker images
bash
Image: Terminal Ubuntu : aperçu de toutes les images
L’image nou­vel­le­ment créée dans l’aperçu.

Pour lancer un conteneur à partir de votre image nou­vel­le­ment créée, utilisez la ligne de commande sudo docker run en com­bi­nai­son avec le nom de l’image :

sudo docker run docker-whale
bash

Si l’image a été cor­rec­te­ment créée à partir du fichier Docker, vous devrez main­te­nant voir ce que votre baleine a à dire ! Notez que chaque fois que vous re­dé­mar­rez le conteneur, une autre phrase est générée.

Image: Conteneur basé sur docker-whale : texte dans le terminal
Grâce à « fortunes », la baleine ASCII vous livre désormais ses secrets !

Taguer les images Docker et les trans­mettre au hub Docker

Si vous souhaitez charger l’image docker-whale que vous avez créée vous-même dans le hub pour la mettre à dis­po­si­tion de la com­mu­nauté ou d’un groupe de travail, vous devez d’abord l’associer à un ré­fé­ren­tiel du même nom dans votre namespace. Dans la ter­mi­no­lo­gie Docker, cette étape est appelée tagging.

Pour publier une image via le hub Docker, procédez comme suit :

  1. Créer un ré­fé­ren­tiel : connectez-vous au hub Docker avec votre iden­ti­fiant Docker et votre mot de passe personnel et créez un ré­fé­ren­tiel public nommé docker-whale.
Image: Hub Docker : créer un référentiel
Créez un ré­fé­ren­tiel pour votre image. / Source : hub.docker.com
  1. Dé­ter­mi­ner l’ID de l’image : dé­ter­mi­nez l’ID de l’image que vous avez créée docker-whale à l’aide de la ligne de commande docker images.
Image: Aperçu de toutes les images locales dans le terminal Ubuntu
La commande « docker images » ré­per­to­rie toutes les images stockées sur votre système.

Dans notre cas, l’ID est a8f2048c9ab8. Nous en avons besoin pour le marquage à l’étape suivante.

  1. Tagguez l’image : tagguez l’image docker-whale à l’aide de la ligne de commande docker tag :
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

Dans l’exemple actuel, la ligne de commande pour le tag est donc la suivante :

sudo docker tag a8f2048c9ab8 [Namespace]/docker-whale:latest
bash

Vérifiez si votre image a été cor­rec­te­ment taguée dans l’aperçu via docker images. Le nom du ré­fé­ren­tiel devrait main­te­nant contenir votre ID Docker.

Image: Terminal Ubuntu : aperçu de l’image avant et après le tagging
Utilisez la commande « docker tag » pour associer des images à votre ID Docker.
  1. Té­lé­char­ger l’image : pour té­lé­char­ger l’image, vous devez d’abord vous connecter au hub Docker. Cela se fait via la commande docker login.
sudo docker login
bash

Le terminal vous demande d’entrer votre nom d’uti­li­sa­teur (l’ID Docker) ainsi que votre mot de passe.

Image: Connexion au hub Docker depuis le terminal Ubuntu
Avant de pouvoir té­lé­char­ger une image dans le hub Docker, vous devez vous connecter

Utilisez ensuite la ligne de commande docker push pour té­lé­char­ger votre image dans le ré­fé­ren­tiel nou­vel­le­ment créé.

sudo docker push [Namespace]/docker-whale
bash

Le processus de té­lé­char­ge­ment ne devrait prendre que quelques secondes. Le statut du té­lé­char­ge­ment est affiché sur le terminal.

Image: Terminal Ubuntu : téléchargement de l’image
Une fois le té­lé­char­ge­ment effectué, l’image est dis­po­nible dans le hub Docker sous le tag « latest » défini.

Connectez-vous au hub Docker via le na­vi­ga­teur pour afficher l’image té­lé­char­gée.

Image: Hub Docker : le référentiel [namespace]/docker-whale
La dernière mise à jour de votre ré­fé­ren­tiel est affichée dans la vue d’ensemble / Source : hub.docker.com

Si vous souhaitez té­lé­char­ger plus d’une image par ré­fé­ren­tiel, utilisez dif­fé­rentes tags pour proposer vos images dans dif­fé­rentes versions. Par exemple :

[Namespace]/docker-whale:latest
[Namespace]/docker-whale:version1
[Namespace]/docker-whale:version2

Une vue d’ensemble des dif­fé­rentes versions d’images peut être obtenue dans les ré­fé­ren­tiels Docker-Hub via l’onglet « Tags ».

Image: Hub Docker : l’onglet « Tags »
Dans l’onglet « Tags », vous trouverez toutes les versions d’une image. / Source : hub.docker.com

Les images de dif­fé­rents projets doivent en revanche être proposées dans des ré­fé­ren­tiels séparés.

Si le té­lé­char­ge­ment a réussi, l’image que vous avez créée vous-même est main­te­nant dis­po­nible pour tous les uti­li­sa­teurs Docker du monde entier via le ré­fé­ren­tiel public.

  1. Faire un test : té­lé­char­gez l’image que vous venez d’uploader dans le ré­fé­ren­tiel pour vérifier qu’elle fonc­tionne cor­rec­te­ment.

Notez que vous devez d’abord supprimer la version locale de l’image pour pouvoir té­lé­char­ger une nouvelle copie avec le même tag. Dans le cas contraire, Docker signale que l’image souhaitée existe déjà dans la version actuelle.

Image: « Image is up to date » (traduit par « La copie locale est à jour »)
Si une image est dis­po­nible lo­ca­le­ment, la commande Pull est annulée.

Pour supprimer des images Docker locales, utilisez la ligne de commande docker rmi en com­bi­nai­son avec l’ID d’image cor­res­pon­dante. Vous dé­ter­mi­nez celui-ci comme évoqué plusieurs fois ci-dessus via docker images. Si Docker signale des conflits - par exemple parce qu’un ID d’image est utilisé dans plusieurs ré­fé­ren­tiels ou par un conteneur -, ajoutez --force (abrégé : -f) à votre commande pour forcer la sup­pres­sion.

sudo docker rmi -f a8f2048c9ab8
bash
Image: Commande docker rmi en combinaison avec l’option -f (force)
Utilisez la commande « docker rmi » en com­bi­nai­son avec l’option « -f » pour forcer la sup­pres­sion.

Affichez à nouveau un aperçu de toutes les images locales :

sudo docker Images
bash

Les éléments supprimés ne devraient plus ap­pa­raître dans la sortie du terminal. Utilisez main­te­nant la commande pull indiquée dans le ré­fé­ren­tiel pour té­lé­char­ger une nouvelle copie de l’image depuis le hub Docker :

sudo docker pull [Namespace]/docker-whale
bash
Image: Terminal Ubuntu téléchargement depuis le hub Docker
L’image publiée pré­cé­dem­ment a été té­lé­char­gée avec succès.

Autres thèmes et tutoriels Docker

L’univers Docker est vaste : au fil du temps, tout un éco­sys­tème d’ex­ten­sions Docker s’est développé. Docker devient surtout in­té­res­sant lorsque des ap­pli­ca­tions complexes sont ex­ploi­tées en parallèle sur dif­fé­rents systèmes avec plusieurs con­te­neurs. Docker offre à cet effet diverses fonctions pour l’or­ches­tra­tion d’un tel cluster. Vous trouverez plus de détails à ce sujet dans notre article com­plé­men­taire sur l’or­ches­tra­tion Docker avec Swarm et Compose.

Pour tra­vail­ler avec Docker, vous trouverez d’autres tutoriels détaillés dans le Digital Guide :

Docker convient aux scénarios d’ap­pli­ca­tion les plus divers. Pour en savoir plus, découvrez les tutoriels suivants :

Mais Docker n’est pas toujours le meilleur choix ! Nous vous pré­sen­tons les prin­ci­pales al­ter­na­tives à Docker. Par ailleurs, nous avons comparé plus en détails certaines al­ter­na­tives avec Docker :

Aller au menu principal