Voici le deuxième volet de la formation Docker. Dans mon précédent article, nous avons présenté Docker et nous l’avons installé sur un système Rocky Linux 8. Aujourd’hui nous allons prendre en main les commandes de base pour manipuler un conteneur Docker.
Exécuter un conteneur
Lancez un conteneur Alpine Linux :
$ docker run -dit alpine Unable to find image 'alpine:latest' locally latest: Pulling from library/alpine 31e352740f53: Pull complete Digest: sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1 Status: Downloaded newer image for alpine:latest ee69d5c92d4dff5e752e8c0070afe6e85f8ef5fc0df2fbbdefc8ffe51e63c320
Il peut arriver que la commande se solde par un message d’erreur Error response from daemon: connection refused
. Ne vous inquiétez pas. Docker Hub est parfois un peu dur de la feuille, et il suffit de réinvoquer la commande.
- Les deux premières lignes de la réponse du shell indiquent que Docker ne dispose pas de l’image, et qu’il doit donc la récupérer dans le dépôt d’images par défaut, en l’occurrence Docker Hub.
- Une fois que Docker a téléchargé l’image, il démarre un conteneur qui utilise cette image.
- La dernière ligne de la sortie, c’est l’identifiant – ou l’ID – du conteneur, que nous pouvons utiliser pour gérer ce conteneur en particulier. Ne vous inquiétez pas, vous n’aurez pas tout ce code à rallonge à taper. Nous utiliserons plutôt une partie unique de l’ID ou même un nom convivial à la place.
- L’option
-d
signifie detach. Elle permet à un conteneur de fonctionner en arrière-plan. Lorsque vous exécutez un conteneur en arrière-plan, Docker affiche un ID du conteneur comme il le fait ici. - L’option
-i
signifie interactive. Avec cette option, Docker garde l’entrée standard (stdin) ouverte même si vous n’êtes pas attaché au conteneur. Ce qui vous permet éventuellement de vous connecter directement au conteneur pour lui envoyer une entrée standard, ou plus simplement de taper des commandes dans le conteneur. - L’option
-i
est directement associée à l’option-t
comme terminal. Si vous voulez interagir avec le shell, vous aurez besoin d’un terminal. - Nous savons que notre conteneur a démarré parce que Docker nous a renvoyé un ID de conteneur une fois que nous avons exécuté la commande
docker run
. Si vous ne voyez pas l’ID de conteneur, c’est qu’il y a eu un problème.
Afficher un conteneur en état d’exécution
La commande docker ps
nous permet de vérifier que notre conteneur fonctionne :
$ docker ps CONTAINER ID IMAGE COMMAND CREATED ... NAMES 57c00f853a75 alpine "/bin/sh" 3 minutes ago ... hardcore_mccarthy
Le système nous affiche un certain nombre de détails sur le ou les conteneurs en cours d’exécution :
CONTAINER ID
:57c00f853a75
– hash de douze caractèresIMAGE
:alpine
– l’image utilisée pour exécuter le conteneurCOMMAND
:"/bin/sh"
– la commande avec laquelle le conteneur a démarréCREATED
:3 minutes ago
– la date de création du conteneurSTATUS
:Up 2 minutes
– la durée de fonctionnement du conteneurPORTS
: informations sur les ports du conteneurNAMES
:hardcore_mccarthy
– le nom humainement lisible du conteneur
Arrêter et redémarrer un conteneur
Pour arrêter le conteneur en état d’exécution, nous pouvons nous servir de l’ID qui s’affiche à gauche :
$ docker stop 57c00f853a75 57c00f853a75
Nous pouvons le relancer de la même manière :
$ docker start 57c00f853a75 57c00f853a75
Ce n’est pas la peine de spécifier l’ID dans son intégralité. Lorsqu’on dispose de plusieurs conteneurs, il suffit théoriquement de taper juste assez de caractères pour lever l’ambiguïté, mais rien n’empêche de trouver un juste compromis. Ici, nous répétons l’opération de redémarrage en utilisant les quatre premiers caractères de l’ID :
$ docker stop 57c0 57c0 $ docker start 57c0 57c0
Enfin, je peux également utiliser le nom « humainement lisible » du conteneur :
$ docker stop hardcore_mccarthy hardcore_mccarthy $ docker start hardcore_mccarthy hardcore_mccarthy
La commande docker ps -a
permet d’afficher le ou les conteneurs stoppés :
$ docker stop hardcore_mccarthy hardcore_mccarthy $ docker ps CONTAINER ID IMAGE COMMAND ... NAMES $ docker ps -a CONTAINER ID IMAGE COMMAND ... NAMES 57c00f853a75 alpine "/bin/sh" ... hardcore_mccarthy $ docker start hardcore_mccarthy hardcore_mccarthy $ docker ps CONTAINER ID IMAGE COMMAND ... NAMES 57c00f853a75 alpine "/bin/sh" ... hardcore_mccarthy
Lancez deux autres conteneurs basés respectivement sur Debian et Ubuntu :
$ docker run -dit debian $ docker run -dit ubuntu
Affichez les conteneurs en cours d’exécution :
$ docker ps CONTAINER ID IMAGE COMMAND CREATED ... NAMES e7f353f1bffe ubuntu "/bin/bash" 30 seconds ago ... eager_colden af0f9acf6507 debian "bash" 2 minutes ago ... quizzical_haibt 57c00f853a75 alpine "/bin/sh" 2 hours ago ... hardcore_mccarthy
Entraînez-vous un peu à les arrêter et à les redémarrer individuellement en utilisant successivement l’ID à douze caractères, l’ID abrégé et le nom humainement lisible. Utilisez systématiquement docker ps
pour afficher les conteneurs en cours d’exécution et docker ps -a
pour voir également les conteneurs stoppés. Pour finir, arrêtez tous les conteneurs.
Détacher un conteneur ?
Voici comment il ne faut pas lancer un conteneur :
$ docker run debian $ docker ps
Que s’est-il passé ? Le conteneur a démarré pour s’arrêter immédiatement. C’est pour cette raison que nous utilisons les options -d
, -i
et -t
. Comme ça le conteneur ne s’arrête pas aussitôt et continue à s’exécuter en arrière-plan .
Vous pouvez combiner les options comme bon vous semble. Peu importe si vous invoquez docker run -dit debian
, docker run -it -d debian
ou docker run -i -t -d debian
, le résultat sera le même.
Ceci étant dit, certains conteneurs peuvent être conçus pour s’acquitter d’une seule tâche et s’arrêter tout de suite après. C’est le cas de la fameuse image hello-world
que l’on utilise généralement pour tester le bon fonctionnement de Docker après son installation :
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Afficher la liste des images locales
Une autre commande que vous utiliserez souvent permet d’afficher les images qui ont été téléchargées localement par Docker :
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 2b4cba85892a 6 days ago 72.8MB debian latest d40157244907 9 days ago 124MB alpine latest c059bfaa849c 3 months ago 5.59MB hello-world latest feb5d9fea6a5 5 months ago 13.3kB
Vous pouvez également utiliser la syntaxe suivante :
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 2b4cba85892a 6 days ago 72.8MB debian latest d40157244907 9 days ago 124MB alpine latest c059bfaa849c 3 months ago 5.59MB hello-world latest feb5d9fea6a5 5 months ago 13.3kB
Inspecter un conteneur
À présent, lancez un conteneur et jetez un œil sous le capot grâce à la commande docker inspect
:
$ docker run -dit alpine 6b238bee1856b02fec058d82dfc631d48e368993f36b4f33cb8fa7e3f2925222 $ docker ps CONTAINER ID IMAGE COMMAND CREATED ... NAMES 6b238bee1856 alpine "/bin/sh" 5 seconds ago ... wizardly_chatelet $ docker inspect 6b23 | less
Vous verrez tout un fatras d’informations qui tapissent votre terminal. Ne vous préoccupez pas des détails pour l’instant, nous apprendrons à apprivoiser ces infos en temps et en heure.
Utiliser l’aide en ligne
Affichez la branche principale de l’aide en ligne :
$ docker --help | less
L’aide en ligne vous affiche toute une série de sous-commandes comme par exemple image
, network
ou volume
. Pour en savoir plus sur chacune de ces sous-commandes, vous pouvez afficher l’aide en ligne détaillée :
$ docker image --help ... $ docker network --help ... $ docker volume --help ...
Certaines sous-commandes acceptent d’autres sous-commandes, avec une aide en ligne correspondante :
$ docker image prune --help
...
Exercice 1
- Allez sur Docker Hub et notez les noms respectifs des images officielles de CentOS et d’Alma Linux.
- Lancez deux conteneurs correspondants avec ces images.
- Arrêtez et relancez chacun des deux conteneurs en utilisant successivement l’ID complet, l’ID abrégé à trois ou quatre caractères et le nom humainement lisible.
- Inspectez successivement les caractéristiques de chaque conteneur en état d’exécution.
- Arrêtez tous les conteneurs.
Exercice 2
- Toujours sur Docker Hub, notez les noms respectifs de Rocky Linux et d’Oracle Linux.
- Essayez de lancer deux conteneurs en utilisant ces images.
- Lisez le message d’erreur que vous renvoie le terminal.
- Rendez-vous sur les pages respectives des images sur Docker Hub et essayez de trouver une solution à votre problème.
Exercice 3
- Lancez un conteneur Alpine Linux en invoquant
docker run -it alpine
. - Regardez votre invite de commandes et essayez de deviner ce qui se passe.
- Invoquez la commande
cat /etc/os-release
pour confirmer vos soupçons. - Ouvrez un deuxième terminal et affichez les conteneurs en état d’exécution grâce à
docker ps
. - Revenez dans le premier terminal et quittez le shell en tapant
exit
. - Affichez les conteneurs en état d’exécution. Que constatez-vous ?
- Essayez d’expliquer avec vos mots ce qui s’est passé.
Exercice 4
- Faites l’inventaire de toutes les images dont vous disposez localement en utilisant deux syntaxes différentes.
Lire la suite : Gérer les images
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire