Docker : premiers pas

Je me lance dans la découverte de Docker et quelques billets jalonneront donc ma progression dans cet univers. Ce premier billet couvre le lancement et la gestion de base d'un conteneur.

Juste pour introduire Docker en une phrase, disons que c'est un gestionnaire de conteneurs logiciels open source écrit en Go. Voilà 🙂

Pour plus d'informations, je vous conseille l'excellent site officiel qui regorge d'informations utiles et qui me servira de guide : https://www.docker.com/

Je m'appuie ici sur un Docker en version 1.4.1 installé sur une machine Ubuntu 14.10.

 

Exécuter un conteneur

Le conteneur peut être lancé de trois manières différentes, de la plus éphémère à la plus permanente.

Méthode one-shot

# docker run ubuntu /bin/echo 'Hello world'
Hello world
#

Ici, on lance un conteneur dans lequel on charge une image ubuntu (la dernière version) et on exécute une commande, par exemple un affichage d'une phrase célèbre.

Docker nous retourne le résultat et le conteneur disparait.

Méthode interactive

# docker run -t -i ubuntu /bin/bash
root@6e66c118d995:/#

Ici, on lance un conteneur toujours avec une image Ubuntu, mais on précise que l'on voir allouer un pseudo terminal (option -t) et un mode interactif avec entrée clavier toujours active (option -i). Puis on lance un shell bash.

Avec cette méthode, on se retrouve à l'intérieur du conteneur comme on peut le voir au niveau du prompt. On peut y exécuter toutes les commandes fournies par le système Ubuntu, installer des paquetages, etc.

Par contre, la sortie du conteneur (via la commande exit) entraine la destruction de celui-ci.

Méthode "démon"

# docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
aa1f17775ba3c6d48aa8de9aa169ed535381a6181e58a81b64669de3a3fef40b
#

On lance donc un nouveau conteneur avec une image Ubuntu, puis on y exécute un affichage de "Hello world" toutes les secondes.

A la différence des modes précédents, nous indiquant ici à Docker de placer le conteneur en arrière plan (option -d). Ainsi, il a un caractère permanent puisque nous ne sommes pas dans le conteneur et pourtant il s'exécute. Docker nous retourne l'identifiant du conteneur qui pourra être utilisé ensuite.

Commandes utiles pour un conteneur en cours

Afficher les identifiants

Une fois qu'un conteneur tourne, les autres commandes disponibles fonctionnent en s'adressant à l'ID du conteneur ou à son nom, visibles via cette commande (première et dernière colonnes) :

# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS              PORTS                NAMES
aa1f17775ba3        ubuntu:14.04        "/bin/sh -c 'while t   About a minute ago   Up About a minute                        desperate_einstein
#

A noter que les identifiants et les noms sont générés de manière aléatoire.

De plus, pour utiliser l'identifiant, pas besoin de le taper en entier ! Seuls les deux premiers cacractères suffisent, tant qu'ils sont uniques sur la machine hôte (sinon trois, puis quatre, etc.)

Afficher la sortie standard

On peut afficher la sortie standard du conteneur :

# docker logs <id ou nom du conteneur>

Avec l'option -f, on a l'équivalent du tail -f c'est à dire que l'affichage s'affiche en continu :

# docker logs -f <id ou nom du conteneur>

Afficher les processus à l'intérieur du conteneur

On peut vouloir afficher la liste des processus qui s'exécutent à l'intérieur du conteneur :

# docker top <id ou nom du conteneur>
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5902                2053                0                   11:47               ?                   00:00:00            /bin/sh -c while true; do echo hello world; sleep 1; done
root                6097                5902                0                   11:50               ?                   00:00:00            sleep 1
#

Démarrer, arrêter, redémarrer un conteneur

Lorsque le conteneur doit être arrêté, on utilise :

# docker stop <id ou nom du conteneur>

Pour le démarrer :

# docker start <id ou nom du conteneur>

Et pour le redémarrer :

# docker restart <id ou nom du conteneur>

Supprimer un conteneur

Seul un conteneur arrêté peut être supprimé :

# docker rm <id ou nom du conteneur>

Mais si on ajoute l'option -f, Docker va killer le conteneur en cours d'exécution pour pouvoir le supprimer :

# docker rm -f <id ou nom du conteneur>

Attention, cette opération supprime totalement le conteneur.

 

 

Laisser un commentaire