Le logiciel open source Docker s’est imposé comme la norme de la vir­tua­li­sa­tion des con­te­neurs d’ap­pli­ca­tions. La vir­tua­li­sa­tion des con­te­neurs est le pro­lon­ge­ment du dé­ve­lop­pe­ment des machines vir­tuelles, à une dif­fé­rence fon­da­men­tale près : au lieu de simuler un système d’ex­ploi­ta­tion complet, une seule ap­pli­ca­tion est vir­tua­li­sée dans un seul conteneur.

Docker est piloté sur le système local via une interface en ligne de commande. Les commandes utilisées sont es­sen­tielles pour tra­vail­ler avec Docker. Nous ex­pli­quons comment les commandes Docker fonc­tion­nent et pré­sen­tons les commandes les plus im­por­tantes.

Que sont les commandes Docker ?

Pour mieux com­prendre ce que sont les commandes Docker et comment elles fonc­tion­nent, nous passons briè­ve­ment en revue la structure de Docker. L’ins­tal­la­tion de Docker sur un hôte local contient comme noyau le moteur d’exécution Docker Engine. Docker Engine est à son tour constitué de trois com­po­sants prin­ci­paux :

  1. Le daemon Docker, qui fonc­tionne comme un dockerd sur l’hôte.
  2. L’API Docker est fournie par le daemon Docker. Le daemon Docker est interrogé et contrôlé par l’API.
  3. L’interface en ligne de commande (en anglais « Command line interface », CLI) est utilisée comme commande docker pour com­mu­ni­quer avec l’API Docker.

On entre les commandes Docker dans la ligne de commande en tant qu'uti­li­sa­teur pour piloter Docker. Les commandes sont reçues et traitées par l’interface CLI Docker. Les appels API cor­res­pon­dants sont générés à partir des commandes auprès du daemon Docker qui exécute la tâche réelle.

Conseil

Pour com­prendre les commandes Docker, il est pré­fé­rable de se fa­mi­lia­ri­ser soi-même avec le logiciel. Consultez notre tutoriel Docker pour intégrer les notions es­sen­tielles.

Comment les commandes Docker sont-elles struc­tu­rées ?

Deux types de commandes Docker se sont établies au fil de l’évolution his­to­rique de Docker.

Il existe d’une part une poignée de commandes autonomes. Celles-ci sont gé­né­ra­le­ment des verbes et exécutent une action spé­ci­fique lors de l’appel. Des exemples connus en sont 'docker pull' ou 'docker build'. Mais il est devenu de plus en plus difficile de trouver des verbes ap­pro­priés au gré de la crois­sance de la pla­te­forme et de l’ap­pa­ri­tion de nouvelles fonc­tion­na­li­tés.

D’autre part, les commandes dites « commandes de gestion Docker » ont été in­tro­duites pour regrouper des commandes afin de remettre de l’ordre dans cette pléthore de commandes. Les commandes de gestion Docker sont gé­né­ra­le­ment des subs­tan­tifs. Des exemples connus en sont 'docker image' et 'docker con­tai­ner'. Les commandes de gestion Docker re­grou­pent des sous-commandes qui sont à leur tour des verbes.

Ceci permet d’utiliser les mêmes verbes dans des contextes dif­fé­rents sans que les noms n’entrent en collision. Par exemple, il existe la commande 'docker image rm' pour supprimer une image, ainsi que 'docker container rm' pour supprimer un conteneur.

Qu’il s’agisse de commandes Docker autonomes ou de commandes de gestion Docker, l’appel des commandes Docker est exécuté dans la ligne de commande. Comme à l’ac­cou­tu­mée, le nom de la commande est saisi en étant suivi de pa­ra­mètres fa­cul­ta­tifs. Le cas échéant, ceci est encore suivi du nom d’un ou de plusieurs objets. Il peut s’agir ici d’un conteneur, d’une image, d’un volume ou d’autres éléments si­mi­laires.

Examinons la structure générale d’une commande Docker dans la ligne de commande. Dans le cas le plus simple, seule la CLI Docker est appelée avec une option jointe :

docker [--options]

Les exemples connus sont l’affichage de la version Docker ou de l’aide Docker :

# Afficher la version de Docker
docker --version
# Afficher l’aide de Docker
docker --help
Conseil

Joignez l’option '--help' à une sous-commande Docker pour sortir les in­for­ma­tions d’aide de la commande.

Dans la plupart des cas, nous ne nous con­ten­tons pas d’appeler la CLI Docker, mais nous sou­met­tons également le nom d’une commande spé­ci­fique. Il peut s'agir ici d’une commande autonome ou d’une commande de gestion suivie d’une sous-commande. Examinons dans un premier temps la structure générale d’une commande Docker autonome. Le nom 'docker' est suivi du nom de la commande, des pa­ra­mètres fa­cul­ta­tifs, ainsi que, le cas échéant, du nom d’un objet Docker :

docker <command> [--options] <object>

Deux commandes Docker autonomes connues du stade de pro­duc­tion sont utilisées pour afficher dif­fé­rentes in­for­ma­tions d’état :

# Afficher l’information Docker
docker info
# Afficher les images Docker sur l’hôte
docker images

Nous allons main­te­nant nous fa­mi­lia­ri­ser avec les commandes de gestion Docker. Comme nous l’avons déjà mentionné, ces dernières servent à remettre de l’ordre dans le chaos issu de la crois­sance dé­sor­ga­ni­sée des commandes. Par exemple, il existait au départ la commande 'docker ls' pour lister les con­te­neurs sur un hôte et, par analogie, la commande 'docker images' pour lister les images. Ce n’est pas très intuitif. Même si l’on peut continuer à utiliser ces deux commandes, il existe aujourd’hui des al­ter­na­tives plus co­hé­rentes avec 'docker container ls' et 'docker image ls'.

Le schéma général des commandes de gestion Docker est basé sur la structure connue des commandes Docker autonomes. Le nom « docker » est suivi du nom de la commande de gestion, ainsi que de la sous-commande. Nous clôturons à nouveau avec des pa­ra­mètres fa­cul­ta­tifs, ainsi que le nom d’un objet Docker le cas échéant :

docker <management-command> <subcommand> [--options] <object>

Nous pouvons illustrer le modèle par un exemple concret. Voici la commande Docker pour démarrer un nouveau conteneur à partir de l’image « httpd » en mode in­te­rac­tif :

docker container run -it httpd

Comparons la structure générale des commandes de gestion Docker avec les dif­fé­rents éléments de l’exemple précédent :

Docker CLI Commande Docker Options Objet
Structure docker <command> <sub­com­mand> [--options] <object>
Exemple docker container run -it httpd
Détails Appelle Docker et soumet d’autres commandes et options. Les noms de commandes doivent être écrits exac­te­ment comme indiqué dans la do­cu­men­ta­tion. Les options sont soumises à la commande et con­trô­lent le com­por­te­ment de celle-ci. Deux con­ven­tions d’écriture existent pour les options, voir ci-dessous. Espace réservé pour un objet en tant que des­ti­na­tion de l’opération. S’il s’agit d’objets Docker, tels que des con­te­neurs et des images, le nom et le code de hachage de l’objet sont utilisés comme ID.

Quelles options sont acceptées par les commandes Docker ?

Comme la plupart des commandes de ligne de commande, les commandes Docker sont con­trô­lées par des pa­ra­mètres fa­cul­ta­tifs, dénommés « options ». Les options succèdent au nom de la commande. Elles sont sensibles à la casse. Deux con­ven­tions d’écriture sont gé­né­ra­le­ment possibles pour la plupart des options :

  1. Forme abrégée : -, p. ex. 'docker -v'

La forme abrégée est peu évo­ca­trice. Mais elle permet de combiner plusieurs options en une seule, par exemple 'docker run -it' au lieu de 'docker -i -t'. La séquence est quel­conque lors du re­grou­pe­ment ; on peut ainsi adopter la notation 'docker run -ti' sans dif­fi­culté. La forme abrégée se prête bien au travail accéléré avec des commandes connues dans la ligne de commande.

  1. Forme longue : --<nom de l’option>, p. ex. 'docker --version'

La forme longue est aisément com­pré­hen­sible, mais nécessite plus de temps à la saisie et occupe davantage d’espace. La forme longue convient bien pour la création de scripts ; les noms d’options évo­ca­teurs font office de do­cu­men­ta­tion.

Quel est le lien entre Do­cker­file, l’image Docker et le conteneur Docker ?

Une grande partie des commandes Docker exis­tantes sont utilisées pour gérer les con­te­neurs Docker, les images Docker et les volumes Docker. Avant de nous pencher en détail sur les commandes Docker spé­ci­fiques, nous vous donnons un bref aperçu des liens qui existent entre le conteneur et l’image, deux notions es­sen­tielles de Docker.

Un conteneur Docker est créé à partir d’un modèle non mo­di­fiable, appelé image. Une image Docker contient les dé­pen­dances et les pa­ra­mètres de con­fi­gu­ra­tion né­ces­saires à la création d’un conteneur. Nous ne pouvons pas seulement créer un conteneur à partir d’une image, mais aussi en­re­gis­trer un conteneur existant dans une nouvelle image. Conteneur et image sont aussi proches l’un de l’autre que l’œuf et la poule :

Commande Docker Sig­ni­fi­ca­tion Analogie de l’œuf et de la poule
docker build Générer une image Docker à partir d’un fichier Do­cker­file Doter un œuf d’in­for­ma­tions gé­né­tiques
docker run <image> Démarrer le conteneur Docker à partir de l’image Le poussin sort de l’œuf
docker commit <container> Générer une image Docker à partir d’un container La poule pond un œuf

Vue d’ensemble des commandes Docker prin­ci­pales

Docker a connu un dé­ve­lop­pe­ment éclair au cours des dix dernières années. Docker englobe aujourd’hui des fonc­tion­na­li­tés qui vont bien au-delà de la vir­tua­li­sa­tion des con­te­neurs à laquelle il doit son origine. On peut ainsi or­ches­trer des groupes de con­te­neurs avec Docker Compose et Docker Swarm, ce qui n’était tra­di­tion­nel­le­ment possible qu’avec des al­ter­na­tives à Docker. Voici un sous-ensemble des commandes d’origine, car une liste ex­haus­tive sortirait du cadre de cet article.

Un conteneur Docker englobe les com­po­sants suivants. Les commandes cor­res­pon­dantes sont dis­po­nibles à des fins de pilotage :

  1. Système d’ex­ploi­ta­tion de conteneur et système de fichiers Union
  2. Com­po­sants logiciels et con­fi­gu­ra­tion
  3. Variables d’en­vi­ron­ne­ment et con­fi­gu­ra­tion à l’exécution
  4. Ports et volumes
  5. Processus et journaux

Quelles sont les commandes Docker autonomes ?

Avant tout, il faut savoir que la plupart des fonc­tion­na­li­tés de Docker peuvent être con­trô­lées aujourd’hui à l’aide de commandes de gestion Docker. Même si les commandes d’origine con­ti­nuent de fonc­tion­ner, il existe des équi­va­lents plus évo­ca­teurs :

Commande Docker autonome Commande de gestion Docker équi­va­lente Ex­pli­ca­tion
docker ps docker container ls Afficher les con­te­neurs qui s’exécutent sur l’hôte
docker images docker image ls Afficher les images dis­po­nibles sur l’hôte
docker inspect <object> docker <object-type> inspect <object>, p. ex. docker image inspect <image> Afficher des in­for­ma­tions sur les objets Docker tels que les images, les con­te­neurs, les volumes, etc.

Cependant, il y existe encore une poignée de commandes Docker autonomes. Ces commandes ne peuvent pas être rem­pla­cées par des commandes de gestion Docker car elles se rap­por­tent à l’ins­tal­la­tion de Docker dans son ensemble :

Commande Docker autonome Ex­pli­ca­tion
docker --help Afficher l’aide pour Docker CLI
docker --version Afficher la version de l’ins­tal­la­tion de Docker
docker info Afficher les in­for­ma­tions con­cer­nant l’ins­tal­la­tion Docker à l’échelle du système
docker login Se connecter à un registre de con­te­neurs ou à un back-end de Cloud
docker logout Se dé­con­nec­ter du registre de con­te­neurs ou du back-end de Cloud

Quelles sont les commandes de conteneur de Docker ?

Con­trai­re­ment à la vir­tua­li­sa­tion des machines vir­tuelles, un conteneur Docker ne contient pas son propre système d’ex­ploi­ta­tion. Au lieu de cela, tous les con­te­neurs présents sur un hôte Docker accèdent au même noyau du système d’ex­ploi­ta­tion. Une certaine quantité de res­sources système est attribuée à chaque conteneur lorsqu’il est exécuté par commande. Cela inclut la mémoire vive, les cœurs de CPU, la mémoire de masse et les pé­ri­phé­riques réseau (virtuels). En voici deux exemples :

Assigner un cœur de CPU et 10 mé­gaoc­tets de mémoire au conteneur Docker :

docker container run --cpus="1" --memory="10m" <image>

Mapper le port TCP 80 de l’hôte Docker sur le port 80 du conteneur Docker :

docker container run -p 80:80/tcp <image>

Sur un hôte, on peut démarrer, arrêter et supprimer des con­te­neurs. Il est possible en outre de piloter les processus en cours d’exécution. Par con­sé­quent, de nom­breuses commandes de conteneur Docker traitent ces tâches :

Commande de conteneur Docker Ex­pli­ca­tion
docker container ls Afficher les con­te­neurs qui s’exécutent sur l’hôte
docker container stats Afficher les in­for­ma­tions d’état des con­te­neurs en cours d'exé­cu­tion
docker container run <image> Démarrer un nouveau conteneur à partir de l’image spécifiée ou exécuter une commande dans un nouveau conteneur
docker container commit <container> Créer une nouvelle image à partir des mo­di­fi­ca­tions apportées à un conteneur en cours d’exécution
docker container attach <container> Permet d’attacher des flux locaux standard d’entrée, de sortie et d’erreur à un conteneur en cours d’exécution
docker container logs <container> Afficher les in­for­ma­tions de journal d’un conteneur
docker container inspect <container> Afficher les in­for­ma­tions dé­tail­lées d’un conteneur
docker container update <container> Re­nou­ve­ler la con­fi­gu­ra­tion d’un conteneur
docker container rename <container> <new-name> Attribuer un nouveau nom à un conteneur
docker container port <container> Afficher les af­fec­ta­tions de port d’un conteneur
docker container pause <container> Mettre en pause les processus en cours d’exécution dans un conteneur
docker container unpause <container> Reprendre l’exécution des processus en pause dans un conteneur
docker container exec <container> <command> Exécuter une commande dans un conteneur en cours d’exécution
docker container stop <container> Arrêter l’exécution d’un conteneur
docker container start <container> Reprendre l’exécution d’un conteneur arrêté
docker container restart <container> Re­dé­mar­rer un conteneur ; se comporte comme docker container stop <container> ; docker container start <container>
docker container top <container> Ré­per­to­rier les processus en cours d’exécution dans un conteneur
docker container kill <container> Tuer un conteneur en cours d’exécution
docker container rm <container> Supprimer un conteneur du système
docker container prune Supprimer tous les con­te­neurs arrêtés du système
docker container cp <container>:<source-path> <dest-path> Copier des fichiers et des dossiers entre un conteneur et le système de fichiers local.
docker container diff <container> Afficher les mo­di­fi­ca­tions apportées au système de fichiers d’un conteneur
docker container export <container> Sortir le système de fichiers d’un conteneur en tant qu’archive tarball, tout en apla­tis­sant toutes les couches à une seule

Quelles sont les commandes d’image de Docker ?

Con­trai­re­ment aux images de machines vir­tuelles, une image Docker n’est pas un fichier isolé à l’état normal. Au lieu de cela, il s’agit d'un re­grou­pe­ment de plusieurs com­po­sants :

  • Couches d’image : con­tien­nent les données ajoutées par opération sur le système de fichiers. Les couches sont empilées et aplaties à un niveau cohérent par un système de fichiers Union.
  • Image parente : fournit les fonctions de base de l’image et ancre l’image dans l’ar­bo­res­cence de l’éco­sys­tème Docker.
  • Manifeste d’images : décrit le re­grou­pe­ment et identifie les couches d’images qu’il contient.

Une image Docker contient des couches protégées en écriture, appelées « layers » en anglais. Chaque couche décrit les mo­di­fi­ca­tions suc­ces­sives du système de fichiers de l’image. Une nouvelle couche est créée pour chaque opération censée entraîner une mo­di­fi­ca­tion du système de fichiers de l’image. Les commandes suivantes per­met­tent d’interagir avec les images dis­po­nibles sur l’hôte :

Commande d’image Docker Ex­pli­ca­tion
docker image build Générer une image Docker à partir d’un fichier Do­cker­file
docker image history <image> Afficher les étapes de création d’une image Docker
docker image import <tarball> Créer une image Docker à partir d’une archive « tarball »
docker image inspect <image> Afficher des in­for­ma­tions dé­tail­lées pour une image Docker
docker image load Charger l’archive d’image créée avec 'docker image save'
docker image ls Ré­per­to­rier les images dis­po­nibles sur l’hôte Docker
docker image prune Supprimer les images Docker inu­ti­li­sées de l’hôte Docker
docker image pull <image> Extraire (tirer) l’image Docker du registre
docker image push <image> Envoyer (pousser) une image dans un registre
docker image rm <image> Supprimer une image de l’hôte local
docker image save <image> Créer une archive d’image avec toutes les couches à partir d’une image
docker image tag <source-image> <target-image> Baliser une image

Quelles sont les commandes des volumes de Docker ?

Un conteneur Docker contient une ap­pli­ca­tion isolée du monde extérieur. Dans de nombreux cas, il est toutefois utile de partager des fichiers entre le conteneur et le système hôte. Docker connaît dif­fé­rents types de volumes à cet effet. Les dif­fé­rences entre les types de volume sont subtiles ; le choix du type approprié dépend fortement du scénario d’uti­li­sa­tion respectif :

  • Volumes nommés : re­com­man­dés
  • Volumes anonymes : sont perdus lors de la sup­pres­sion du conteneur
  • Points de montage : con­di­tion­nés à des raisons his­to­riques et non re­com­man­dés ; per­for­mants
  • Points de montage tmpfs : stockés sur la mémoire de l’hôte ; sous Linux uni­que­ment

Une poignée de commandes Docker est dis­po­nible pour interagir avec les volumes :

Commande Docker Volume Ex­pli­ca­tion
docker volume ls Afficher les volumes présents sur l’hôte
docker volume prune Supprimer tous les volumes inu­ti­li­sés de l’hôte
docker volume create Créer un nouveau volume sur l’hôte
docker inspect <volume> Afficher les in­for­ma­tions dé­tail­lées d’un volume
docker volume rm <volume> Supprimer le volume spécifié de l’hôte
Aller au menu principal