Les commandes de base
Objectif de cet atelier pratique
- Prise en main des 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
Connexion refusée ?
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 -dsignifie 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 -isignifie 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 -iest directement associée à l'option-tcomme 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ères
- 
IMAGE:alpine– l'image utilisée pour exécuter le conteneur
- 
COMMAND:"/bin/sh"– la commande avec laquelle le conteneur a démarré
- 
CREATED:3 minutes ago– la date de création du conteneur
- 
STATUS:Up 2 minutes– la durée de fonctionnement du conteneur
- 
PORTS: informations sur les ports du conteneur
- 
NAMES: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 :
Nous pouvons le relancer de la même manière :
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 :
Enfin, je peux également utiliser le nom « humainement lisible » du conteneur :
$ docker stop hardcore_mccarthy
hardcore_mccarthy
$ docker start hardcore_mccarthy
hardcore_mccarthy
Travailler moins pour taper plus
Cette variante permet d'utiliser la complétion automatique. Essayez. Tapez les deux ou trois premières lettres du conteneur et appuyez sur la touche Tab.
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 :
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 pspour afficher les conteneurs en cours d'exécution etdocker ps -apour 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 :
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.
Combiner les options
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 :
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 :
Certaines sous-commandes acceptent d'autres sous-commandes, avec une aide en ligne correspondante :
À vous de jouer !
Challenge n° 1
- 
Allez sur Docker Hub et notez les noms respectifs des images officielles pour Arch Linux et AlmaLinux. 
- 
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. 
Challenge n° 2
- 
Notez les noms respectifs des images pour Rocky Linux et Oracle Linux sur Docker Hub. 
- 
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. 
Challenge n° 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-releasepour confirmer vos soupçons.
- 
Ouvrez un deuxième terminal et affichez les conteneurs en état d'exécution. 
- 
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é. 
Challenge n° 4
- Faites l'inventaire de toutes les images dont vous disposez localement en utilisant deux syntaxes différentes.
