Lancer son premier conteneur

A la découverte de Docker partie 2

Image

Avant de se lancer à corps perdu dans Docker et de pouvoir lancer ses premiers conteneurs, il est important de saisir ce qu’est une image.

Il faut voir les images comme des legos qui sont empilés les uns sur les autres. Vous avez des gros legos qui sont des images de système d’exploitation comme Ubuntu, Debian, CentOS et qui vont servir de base à la création d’autres images plus spécifiques comme Apache, Nginx ou bien encore WordPress, bref. Il y a en vraiment beaucoup.

Techniquement une image est un template qui permet de décrire la façon dont va se construire un conteneur, elle contient plusieurs choses comme le système de fichiers, des binaires systèmes, le contenu de l’application, etc.

Alpine

Pour débuter, c’est toujours l’exemple de l’image Alpine qui est utilisé. C’est une distribution Linux qui est très légère, on va justement prendre cet exemple et essayer de lancer notre premier conteneur pour voir un peu ce qu’il se passe.

Voici la structure de la commande : docker container run <options> <image>.

docker container run alpine

Comme je n’ai pas l’image Alpine en local, Docker va la télécharger et la stocker sur ma machine.

Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
cd784148e348: Pull complete 
Digest: sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1
Status: Downloaded newer image for alpine:latest

Liste des conteneurs

Visiblement il n’y a pas eu d’erreur, mais comment je peux savoir si mon container a bien été lancé ? Et bien il existe la commande ls qui permet d’afficher les conteneurs qui sont en cours d’exécution.

docker container ls 

Rien ne s’affiche ? C’est tout à fait normal, en fait nous avons lancé le conteneur et celui-ci s’est directement « éteint ». Pour afficher la liste de tous les conteneurs, même ceux éteints, on va utiliser l’option -a.

docker container ls -a

Le conteneur existe bien mais il a le statut « Exited » car rien ne tourne dedans.

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
92adc86ad81c        alpine              "/bin/sh"           6 seconds ago       Exited (0) 2 seconds ago                       thirsty_snyder

Mode interactif

Pour lancer un container avec l’image Alpine et pouvoir « jouer » avec, je vais utiliser le mode interactif via les options -ti (-t va créer un terminal dans le conteneur et -i va me permettre de me connecter à celui-ci).

docker container run -ti alpine

Maintenant je suis connecté au conteneur dans un shell interactif. Si j’exécute un ls -la, je peux voir les répertoires qui sont présents !

/ # ls -la
total 60
drwxr-xr-x    1 root     root          4096 Dec 27 17:12 .
drwxr-xr-x    1 root     root          4096 Dec 27 17:12 ..
-rwxr-xr-x    1 root     root             0 Dec 27 17:12 .dockerenv
drwxr-xr-x    2 root     root          4096 Dec 20 22:25 bin
drwxr-xr-x    5 root     root           360 Dec 27 17:12 dev
drwxr-xr-x    1 root     root          4096 Dec 27 17:12 etc
drwxr-xr-x    2 root     root          4096 Dec 20 22:25 home
drwxr-xr-x    5 root     root          4096 Dec 20 22:25 lib
drwxr-xr-x    5 root     root          4096 Dec 20 22:25 media
drwxr-xr-x    2 root     root          4096 Dec 20 22:25 mnt
dr-xr-xr-x  204 root     root             0 Dec 27 17:12 proc
drwx------    1 root     root          4096 Dec 27 17:12 root
drwxr-xr-x    2 root     root          4096 Dec 20 22:25 run
drwxr-xr-x    2 root     root          4096 Dec 20 22:25 sbin
drwxr-xr-x    2 root     root          4096 Dec 20 22:25 srv
dr-xr-xr-x   13 root     root             0 Dec 27 17:12 sys
drwxrwxrwt    2 root     root          4096 Dec 20 22:25 tmp
drwxr-xr-x    7 root     root          4096 Dec 20 22:25 usr
drwxr-xr-x   11 root     root          4096 Dec 20 22:25 var

Si je quitte le conteneur en faisant un exit, celui-ci va naturellement s’éteindre car il ne fera plus rien.

Mode détaché

L’option -d permet de lancer un conteneur en tâche de fond et de ne pas bloquer la console avec un shell interactif.

Par contre, dans le cas de l’image Alpine, il faut lui demander de faire quelque chose sinon le conteneur va quand même s’éteindre. On va donc lui faire exécuter un petit ping pour la démonstration.

docker container run -d alpine ping 8.8.8.8

En exécutant cette commande, Docker me retourne l’identifiant du conteneur.

8a12fd32012786aa25af9a533e53f6142dc28fd6df9d8b6d78e245da88e42334

Maintenant, en faisant un docker container ls, je peux voir que mon conteneur tourne bien et que je ne suis pas bloqué dans la console.

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
8a12fd320127        alpine              "ping 8.8.8.8"      About a minute ago   Up About a minute                       gallant_ritchie

Si tu es arrivé jusqu’ici sans encombre, félicitations ! Tu viens de lancer ton premier conteneur Docker !

Résumé des commandes

#Lance un conteneur basé sur l'image Alpine
docker container run alpine

#Lance un conteneur en mode interactif pour prendre le contrôle
docker container run -ti alpine

#Lance un conteneur en tâche de fond et donne quelque chose à faire au conteneur
docker container run -d alpine ping 8.8.8.8

#liste les containers allumés et éteints
docker container ls -a

Hub

Si tu veux avoir une idée des images qui sont disponibles, il existe un immense dépôt, le Docker Hub, où tu pourras voir les images les plus populaires et le nombre de téléchargements qui est souvent synonyme de fiabilité.

27/12/2018

Yann Vangampelaere - nouslesdevs -

Sinon jete un coup d’oeil aux autres catégories

Ma boîte aux lettres

Tu veux me demander quelque chose ?