Tutoriel Docker : introduction à la célèbre plateforme de conteneurs

Découvrez notre tutoriel Docker : nous vous expliquons comment la plateforme de virtualisation Docker fonctionne et nous vous montrons comment l’utiliser sur votre système Ubuntu 22.04 à l’aide d’instructions faciles à suivre.

Docker : structure et fonctions

« Build, Ship and Run Any App, Anywhere » : c’est sous cette devise que la plateforme de conteneurs open source Docker promeut une alternative flexible et économe en ressources à l’émulation de composants matériels sur la base de machines virtuelles (VM). Alors que la virtualisation matérielle classique repose sur le lancement de plusieurs systèmes invités sur un système hôte commun, Docker utilise des conteneurs pour exécuter des applications en tant que processus isolés sur un seul et même système. C’est pourquoi la virtualisation de serveur basée sur des conteneurs est également appelée virtualisation du système d’exploitation.

comparaison-machine-virtuelle-conteneur-docker.png
Alors que chaque machine virtuelle démarre son propre système d’exploitation, les conteneurs Docker partagent le noyau du système hôte.

Le principal avantage de la virtualisation basée sur les conteneurs réside dans la possibilité d’exécuter des applications avec des exigences diffé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 applications peuvent être déployées avec des conteneurs sur diverses plateformes et infrastructures, sans nécessiter d’adaptation aux configurations matérielles ou logicielles du système hôte. Docker est le projet logiciel le plus connu qui met à la disposition des utilisateurs une technologie de virtualisation basée sur des conteneurs. La plateforme open source s’appuie sur trois composants de base : pour exécuter des conteneurs, les utilisateurs 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 conteneurs et les images Docker sont la plupart du temps génériques, mais peuvent aussi être personnalisés selon les besoins. Vous trouverez plus d’informations dans notre article sur les conteneurs Docker.

Les images Docker

Comme les machines virtuelles, les conteneurs Docker sont basés sur des images Docker. Une image est un modèle en lecture seule qui contient toutes les instructions 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 Dockerfile. Si un conteneur doit être démarré sur un système, un paquet avec l’image correspondante est d’abord chargé (si celle-ci n’est pas déjà disponible localement). L’image chargée met à disposition le système de fichiers nécessaire pour l’exécution, y compris tous les paramè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érentiels de logiciels basé sur le Cloud ; cela fonctionne en quelque sorte comme une bibliothè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 utilisateurs la possibilité de télécharger des images développées par eux-mêmes et de les partager avec la communauté. Une série d’images officielles de l’équipe de développement Docker et de projets open source établis y sont également disponibles. Les images téléchargées dans une zone privée du registre ne sont pas accessibles au public et peuvent ainsi être partagées, par exemple, au sein d’une entreprise ou dans le cercle d’amis et de connaissances. 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 application client-serveur ouverte à tous, dont la version actuelle est disponible pour les utilisateurs sur toutes les plateformes établies.

Le moteur Docker est composé de trois éléments fondamentaux : tout d’abord, un daemon doté de fonctions de serveur, ensuite une interface de programmation (API) basée sur le principe de programmation REST (Representational State Transfer), et enfin, le terminal du système d’exploitation (Command-Line Interface, CLI), servant d’interface utilisateur (client).

  • Le daemon Docker : le moteur Docker utilise un processus de daemon comme serveur. Le daemon Docker fonctionne 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, conteneurs ou réseaux.
  • L’API REST : l’API REST spécifie une série d’interfaces qui permettent à d’autres programmes de communiquer avec le daemon Docker et de lui donner des instructions. L’un de ces programmes est le terminal du système d’exploitation.
  • Le terminal : en tant que programme client, Docker utilise le terminal du système d’exploitation. Celui-ci interagit avec le daemon Docker via l’API REST et permet aux utilisateurs de le contrôler par le biais de scripts ou d’entrées utilisateur.
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 documentation officielle et dans les référentiels Docker. En plus de Docker CE, il existe également Docker Enterprise Edition (Docker EE), qui dispose de quelques fonctionnalités haut de gamme. Celle-ci n’est toutefois pas gratuite et convient plutôt aux entreprises.

Avec les commandes Docker, les utilisateurs peuvent démarrer, arrêter et gérer des conteneurs logiciels directement depuis le terminal. On s’adresse au daemon via la commande docker et des instructions telles que build (créer), pull (télécharger) ou run (démarrer). Le client et le serveur peuvent se trouver sur le même système. Les utilisateurs ont également la possibilité de s’adresser à un daemon Docker sur un autre système. Selon le type de connexion à établir, la communication 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’interaction des différents composants de Docker à l’exemple des commandes docker build, docker pull et docker run :

schema-architecture-docker.png
L’architecture Docker est basée sur une interaction entre le client (terminal

La commande docker build indique au daemon Docker de créer une image (ligne pointillée). Pour cela, un Dockerfile correspondant doit être disponible. Si l’image ne doit pas être créée par l’utilisateur, mais chargée à partir d’un référentiel dans le hub Docker, la commande docker pull est utilisée (ligne pointillée). Si le daemon Docker reçoit l’instruction de démarrer un conteneur via docker run, le programme d’arrière-plan vérifie d’abord si l’image du conteneur correspondant est disponible localement. Si c’est le cas, le conteneur est exécuté (ligne continue). Si le daemon ne peut pas trouver l’image, il lance automatiquement une opération de pulling à partir du référentiel.

Serveurs dédiés
Performance et innovation

Profitez de votre propre serveur, avec hardware dédié, intégration Cloud, facturation à la minute et processeur Intel® Xeon® ou AMD.

Travailler avec Docker

Il est maintenant temps de se familiariser avec les applications de la plateforme de conteneurs. Si vous n’avez pas encore installé le moteur Docker, vous pouvez le faire via le terminal Linux. Vous trouverez des instructions à 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 possibilités offertes par le hub Docker et pourquoi les conteneurs Docker pourraient révolutionner le traitement des applications.

Conseil

Si vous souhaitez installer Docker sur une autre distribution Linux ou Windows, les articles suivants sont à votre disposition :

Gérer le moteur Docker

Depuis la version 16.04, Ubuntu utilise le programme d’arrière-plan systemd(abréviation de “System-Daemon”) pour gérer les processus.systemdest un processus init qui est également utilisé dans d’autres distributions 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 responsable du démarrage, de la surveillance et de l’arrêt de tous les processus suivants. Dans les versions anté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’installation standard, la plateforme de conteneurs est configurée de telle sorte que le daemon démarre automatiquement avec le démarrage du système. Ce réglage par défaut peut être adapté individuellement 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 ressources spécifiques. Dans la terminologie de systemd, celles-ci sont appelées « units ». Dans ce cas, la commande résulte de l’instruction correspondante et du nom de l’unit à laquelle on veut s’adresser.

Si vous souhaitez activer (enable) ou désactiver (disable) le démarrage automatique 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’interroger 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 correspondre à celle de la capture d’écran suivante :

docker-status-active-running.png
systemctl montre que le moteur Docker est actif (running).

Si votre moteur Docker est désactivé à ce moment-là, vous obtenez l’indication de statut inactive (dead). Dans ce cas, démarrez manuellement le daemon Docker pour exécuter les conteneurs.

docker-status-inactive.png
systemctl montre que le moteur Docker est inactif (dead).

Si vous souhaitez démarrer, arrêter ou redémarrer manuellement votre moteur Docker, adressez-vous à systemd avec l’une des commandes suivantes.

Pour démarrer le daemon désactivé, utilisez systemctl en combinaison 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 redémarrer 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 plateforme de conteneurs, le hub Docker est l’âme du projet open source, car c’est ici que la communauté se réunit. Les utilisateurs trouvent dans ce registre basé sur le Cloud tout ce dont ils ont besoin pour donner vie à leur installation Docker.

Le service en ligne propose divers référentiels officiels avec plus de 100 000 applications gratuites. Les utilisateurs ont la possibilité de créer leurs propres archives d’images et de les partager avec des groupes de travail. En plus d’une assistance professionnelle offerte par l’équipe de développement, les débutants peuvent également rejoindre la communauté des utilisateurs. Un forum pour le support de la communauté est disponible via GitHub.

docker-hub-login-page.png
Vous créez votre ID Docker personnel gratuitement lorsque vous vous inscrivez. / Source : hub.docker.com

Inscription au hub Docker

L’inscription au hub Docker est gratuite. Les utilisateurs ont seulement besoin d’une adresse email et de l’ID Docker qu’ils ont eux-mêmes choisi. Celui-ci fonctionnera plus tard comme espace de noms de référentiels personnel et permettra aux utilisateurs d’accéder à tous les services Docker. Actuellement, l’offre comprend donc le hub Docker, le Cloud Docker, le store Docker et certains programmes 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’inscription se déroule en cinq étapes :

  1. Choisir un ID Docker : pour s’inscrire, vous choisissez un nom d’utilisateur qui deviendra ensuite votre ID Docker.
  2. Indiquer l’adresse email : saisissez votre adresse email actuelle. Notez que vous devez confirmer les inscriptions au hub Docker par email.
  3. Définir un mot de passe : choisissez un mot de passe confidentiel.
  4. Envoyer l’inscription : cliquez sur « Sign up » pour soumettre votre inscription. Si toutes les données ont été transmises, Docker enverra un lien de vérification 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érification.

Les services en ligne du projet Docker sont à votre disposition immédiatement après l’enregistrement en ligne. Vous pouvez désormais créer des référentiels et des groupes de travail ou rechercher des ressources publiques dans le hub Docker via la fonction « Explore ».

docker-hub-dashboard.png
Le tableau de bord du hub Docker permet de gérer les référentiels et les groupes de travail. / Source : hub.docker.com

Alternativement, vous pouvez également vous connecter via docker login directement depuis le terminal de votre système d’exploitation. Vous trouverez une description détaillée de cette commande dans la documentation Docker.

En principe, le hub Docker est à votre disposition même sans compte et ID Docker. Mais dans ce cas, seules les images des référentiels publics peuvent être chargées. Il n’est pas possible de télécharger ses propres images sans ID Docker.

Créer des référentiels dans le hub Docker

Le compte gratuit du hub Docker comprend un référentiel privé et vous offre la possibilité de créer autant de référentiels publics que vous le souhaitez. Si vous avez besoin d’autres référentiels privés, vous pouvez les débloquer avec une mise à niveau payante.

Pour créer un référentiel, procédez comme suit :

  1. Sélectionner les namespaces : les référentiels nouvellement créés sont automatiquement attribués au namespace de votre ID Docker. Vous avez également la possibilité d’indiquer l’ID d’une organisation à laquelle vous appartenez.
  2. Nommer le référentiel : indiquez un nom pour le référentiel nouvellement créé.
  3. Ajouter une description : ajoutez une description pour votre référentiel.
  4. Configurer la visibilité : décidez si le référentiel doit être visible publiquement (public) ou uniquement accessible à vous ou à votre organisation (private).

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

docker-hub-repository-creation.png
Vos référentiels sont automatiquement créés dans le namespace de votre ID Docker. / Source : hub.docker.com

Créer des groupes de travail et des organisations

Avec le Hub, Docker vous offre une plateforme basée sur le Cloud sur laquelle vous pouvez gérer de manière centralisée les images que vous avez créées et les partager facilement avec des groupes de travail. Dans la terminologie Docker, ces derniers sont appelés « organisations ». Tout comme les comptes utilisateurs, les organisations reçoivent des identifiants individuels qui leur permettent de mettre à disposition et de télécharger des images. Les droits et les rôles au sein d’une organisation peuvent être attribués par le biais d’équipes. Par exemple, seuls les utilisateurs affectés au groupe « Owners » sont autorisés à créer des référentiels privés ou publics et à attribuer des droits d’accès.

Vous pouvez également créer et gérer des groupes de travail directement via le tableau de bord. Vous trouverez plus d’informations sur l’utilisation des organisations et des groupes de travail dans la documentation Docker.

Comment travailler avec des images et des conteneurs ?

En tant que premier point de contact pour les ressources officielles de Docker, le hub Docker constitue le point de départ pour utiliser des images et des conteneurs. L’équipe de développement y met notamment à disposition l’image de démonstration whalesay, qui servira de base au tutoriel Docker suivant.

Télécharger les images Docker

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

docker-hub-whalesay-repos.png
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érentiel public de cette image.

Les référentiels Docker sont toujours structurés selon le même modèle : dans l’en-tête de la page, les utilisateurs trouvent la désignation de l’image, la catégorie du référentiel ainsi que la date du dernier téléchargement (last pushed).

docker-hub-official-whalesay-repo.png
Dans le référentiel, les utilisateurs trouvent généralement toutes les informations nécessaires à l’utilisation de l’image. / Source : hub.docker.com

De plus, chaque référentiel Docker propose les zones d’information suivantes :

  • Description : description détaillée, en général avec mode d’emploi
  • Docker Pull Command : ligne de commande pour télécharger l’image du référentiel (pull)
  • Owner : information sur le créateur du référentiel
  • Comments : zone de commentaires en bas de page

Les zones d’information du référentiel indiquent que whalesay est une modification 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’utilisateur.

Pour télécharger 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érentiel. Vous déterminez 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 facultatif d’indiquer des tags (:TAG) et des numéros d’identification uniques (@DIGEST), qui permettent de télécharger une version spécifique 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 automatiquement les images qu’il ne peut pas trouver sur le système local à partir du référentiel.

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 obligatoire de la commande docker run est le nom de l’image Docker souhaitée. Même si vous lancez des conteneurs, vous avez la possibilité de définir des options facultatives, 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 automatiquement au démarrage du conteneur) définie par le créateur de l’image est remplacée. D’autres configurations optionnelles peuvent être définies par des arguments supplémentaires (ARG…). Ceux-ci permettent par exemple d’ajouter des utilisateurs ou de transmettre des variables d’environnement.

Pour télécharger le script Perl disponible 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 constaterez que whalesay diffère du script d’origine sur un point essentiel.

docker-run-whalesay-boo-english.png
Si « docker/whalesay » est exécuté avec la commande standard, la baleine Docker transmettra 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épertoire de fichiers local. Comme aucun paquet du même nom ne s’y trouve, un pulling est lancé à partir du référentiel Docker. Ensuite, le daemon démarre le programme cowsay modifié. Une fois le programme terminé, le conteneur est automatiquement fermé.

Comme cowsay, whalesay de Docker vous offre la possibilité d’intervenir dans le déroulement du programme afin de modifier la sortie de texte dans le terminal. Testez cette fonction en remplaçant le « boo » de la commande de sortie par une chaîne de caractè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
docker-run-whalesay-witz.png
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.

sudo-docker-images-empty.png
L’aperçu montre les images « hello-world » et « docker/whalesay ».

Lorsque vous lancez un conteneur, l’image sous-jacente est téléchargée sous forme de copie depuis le référentiel et est enregistrée de manière permanente sur votre ordinateur. Vous gagnez ainsi du temps si vous souhaitez par la suite à nouveau accéder à l’image en question. Un nouveau téléchargement n’est initié que si la source de l’image change, par exemple si une version plus récente est disponible dans le référentiel.

Afficher tous les conteneurs sur le système local

Si vous souhaitez obtenir une vue d’ensemble de tous les conteneurs 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 combinaison avec l’option --all (raccourci : -a) :

sudo docker ps -a
bash
sudo-docker-ps-a-english.png
L’aperçu montre tous les conteneurs qui ont été lancés sur le moteur Docker.

La sortie du terminal comprend des informations 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 uniquement afficher les conteneurs en cours d’exécution sur votre système, utilisez simplement la ligne de commande docker ps :

sudo docker ps
bash

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

Créer des images Docker

Vous savez maintenant comment trouver des images dans le hub Docker, les télécharger 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’applications du registre. La plateforme vous offre de vastes possibilités de créer vos propres images et de les partager avec d’autres développeurs.

Vous avez déjà appris dans les chapitres d’introduction de ce tutoriel Docker que chaque image est basée sur un Dockerfile. Vous pouvez vous représenter les dockerfiles comme une sorte de manuel de construction. Il s’agit de simples fichiers texte qui contiennent toutes les instructions nécessaires à 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épertoire : l’équipe de développement de Docker recommande de créer un répertoire séparé pour chaque fichier Docker. Sous Linux, vous créez facilement des répertoires via le terminal. Utilisez la commande suivante pour créer un répertoire nommé mydockerbuild :
mkdir mydockerbuild
bash
mkdir-mydockerbuild-english.png
Pour créer de nouveaux répertoires, utilisez la commande « mkdir ».
  1. Ouvrir le nouveau répertoire : utilisez la commande cd pour naviguer vers le nouveau répertoire de travail créé.
cd mydockerbuild
bash
cd-mydockerbuild-english.png
Utilisez la commande « cd » pour changer de répertoire de travail.
  1. Créer un nouveau fichier texte : sous Ubuntu, vous pouvez également créer facilement des fichiers texte via le terminal. Utilisez pour cela un éditeur comme Nano ou Vim. Créez un fichier texte nommé Dockerfile dans le répertoire mydockerbuild.
nano Dockerfile
bash
nano-dockerfile-empty.png
L’éditeur de texte Nano est préinstallé sur toutes les versions d’Ubuntu.
  1. Rédiger un dockerfile : le fichier texte nouvellement créé sert de plan de construction pour l’image que vous avez développée vous-même. Au lieu de programmer l’image à partir de zéro, nous utilisons dans ce tutoriel Docker l’image de démonstration 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 fonctionne 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 exactement celui que vous avez saisi auparavant en combinaison avec la commande de lancement du conteneur. Il serait toutefois plus intéressant que le script automatique génère toujours de nouvelles sorties de texte. Cela peut être réalisé par exemple à l’aide du programme fortunes, qui est disponible 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 humoristiques. 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 instruction 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 maintenant ressembler à 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 commencent toujours par un mot-clé. Il importe cependant peu que vous mettiez des majuscules ou des minuscules. Il s’est toutefois établi que les mots clés sont systématiquement écrits en majuscules.

nano-dockerfile-full.png
Vous pouvez contrôler l’éditeur de texte Nano à l’aide des raccourcis clavier indiqués en bas de la page.
  1. Enregistrer le fichier texte : si vous utilisez l’éditeur Nano, utilisez la combinaison de touches [CTRL] + [O] et confirmez avec [ENTER] pour enregistrer. Nano vous informe ensuite que trois lignes ont été écrites dans le fichier sélectionné. Quittez l’éditeur de texte avec la combinaison 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épertoire 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 individuel à l’image ou lui attribuer un tag, utilisez l’option -t ainsi que la combinaison 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épertoire sélectionné. Vous avez également la possibilité 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écessaires à la création de l’image. Dans la terminologie 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écessaires sont présents pour créer l’image, il procède à la construction de l’image : pour ce faire, il démarre le modèle d’image spécifié par l’instruction FROM dans un conteneur temporaire, puis exécute la commande suivante dans le Dockerfile. Dans l’exemple donné, il s’agit de la commande RUN, qui entraîne l’installation 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) correspondante qui a été créée. La règle est la suivante : chaque ligne du fichier Docker correspond à une couche de l’image construite.

Successfully built a8f2048c9ab8
sudo-docker-build-whale-english.png
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 enregistrées localement.

sudo docker images
bash
docker-images-new-docker-whale.png
L’image nouvellement créée dans l’aperçu.

Pour lancer un conteneur à partir de votre image nouvellement créée, utilisez la ligne de commande sudo docker run en combinaison avec le nom de l’image :

sudo docker run docker-whale
bash

Si l’image a été correctement créée à partir du fichier Docker, vous devrez maintenant voir ce que votre baleine a à dire ! Notez que chaque fois que vous redémarrez le conteneur, une autre phrase est générée.

sudo-run-docker-whale-fortunes-english.png
Grâce à « fortunes », la baleine ASCII vous livre désormais ses secrets !

Taguer les images Docker et les transmettre 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 à disposition de la communauté ou d’un groupe de travail, vous devez d’abord l’associer à un référentiel du même nom dans votre namespace. Dans la terminologie 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érentiel : connectez-vous au hub Docker avec votre identifiant Docker et votre mot de passe personnel et créez un référentiel public nommé docker-whale.
docker-hub-create-docker-whale-repo.png
Créez un référentiel pour votre image. / Source : hub.docker.com
  1. Déterminer l’ID de l’image : déterminez l’ID de l’image que vous avez créée docker-whale à l’aide de la ligne de commande docker images.
sudo-docker-images-id-english.png
La commande « docker images » répertorie 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é correctement taguée dans l’aperçu via docker images. Le nom du référentiel devrait maintenant contenir votre ID Docker.

sudo-docker-tag-docker-whale-english.png
Utilisez la commande « docker tag » pour associer des images à votre ID Docker.
  1. Télécharger l’image : pour télécharger 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’utilisateur (l’ID Docker) ainsi que votre mot de passe.

sudo-docker-login-english.png
Avant de pouvoir télécharger une image dans le hub Docker, vous devez vous connecter

Utilisez ensuite la ligne de commande docker push pour télécharger votre image dans le référentiel nouvellement créé.

sudo docker push [Namespace]/docker-whale
bash

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

sudo-docker-push-whale-english.png
Une fois le téléchargement effectué, l’image est disponible dans le hub Docker sous le tag « latest » défini.

Connectez-vous au hub Docker via le navigateur pour afficher l’image téléchargée.

docker-hub-push-result.png
La dernière mise à jour de votre référentiel est affichée dans la vue d’ensemble / Source : hub.docker.com

Si vous souhaitez télécharger plus d’une image par référentiel, utilisez différentes tags pour proposer vos images dans différentes versions. Par exemple :

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

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

docker-hub-multiple-versions-tags.png
Dans l’onglet « Tags », vous trouverez toutes les versions d’une image. / Source : hub.docker.com

Les images de différents projets doivent en revanche être proposées dans des référentiels séparés.

Si le téléchargement a réussi, l’image que vous avez créée vous-même est maintenant disponible pour tous les utilisateurs Docker du monde entier via le référentiel public.

  1. Faire un test : téléchargez l’image que vous venez d’uploader dans le référentiel pour vérifier qu’elle fonctionne correctement.

Notez que vous devez d’abord supprimer la version locale de l’image pour pouvoir télécharger 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.

sudo-docker-pull-docker-whale-english.png
Si une image est disponible localement, la commande Pull est annulée.

Pour supprimer des images Docker locales, utilisez la ligne de commande docker rmi en combinaison avec l’ID d’image correspondante. Vous déterminez 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érentiels ou par un conteneur -, ajoutez --force (abrégé : -f) à votre commande pour forcer la suppression.

sudo docker rmi -f a8f2048c9ab8
bash
sudo-docker-rmi-remove-image.png
Utilisez la commande « docker rmi » en combinaison avec l’option « -f » pour forcer la suppression.

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

sudo docker Images
bash

Les éléments supprimés ne devraient plus apparaître dans la sortie du terminal. Utilisez maintenant la commande pull indiquée dans le référentiel pour télécharger une nouvelle copie de l’image depuis le hub Docker :

sudo docker pull [Namespace]/docker-whale
bash
sudo-docker-pull-image-redownload.png
L’image publiée précédemment a été téléchargée avec succès.

Autres thèmes et tutoriels Docker

L’univers Docker est vaste : au fil du temps, tout un écosystème d’extensions Docker s’est développé. Docker devient surtout intéressant lorsque des applications complexes sont exploitées en parallèle sur différents systèmes avec plusieurs conteneurs. Docker offre à cet effet diverses fonctions pour l’orchestration d’un tel cluster. Vous trouverez plus de détails à ce sujet dans notre article complémentaire sur l’orchestration Docker avec Swarm et Compose.

Pour travailler avec Docker, vous trouverez d’autres tutoriels détaillés dans le Digital Guide :

Docker convient aux scénarios d’application les plus divers. Pour en savoir plus, découvrez les tutoriels suivants :

Mais Docker n’est pas toujours le meilleur choix ! Nous vous présentons les principales alternatives à Docker. Par ailleurs, nous avons comparé plus en détails certaines alternatives avec Docker :

Cet article vous a-t-il été utile ?
Page top