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.
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.
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 -