4.5 KiB
\newpage
Mon premier conteneur
Afin de tester la bonne marche de votre installation, exécutons la commande :
docker run hello-world
Cette commande va automatiquement exécuter une série de commandes pour nous, comme indiqué dans le message affiché en retour :
D'abord, le daemon va rechercher s'il possède localement l'image
hello-world. Si ce n'est pas le cas, il va aller la récupérer sur
hub.docker.com
. Ce site met à disposition un grand nombre d'images : des
systèmes de base comme Ubuntu, Debian, Centos, etc. jusqu'à des conteneurs
prêts à l'emploi : le serveur web nginx, la base de données MySQL, un serveur
node.js, etc.
Nous pouvons directement utiliser le client pour rechercher une image sur le
hub, en utilisant la commande search
:
docker search mariadb
Il est possible de mettre à jour les images locales ou simplement
pré-télécharger des images depuis le hub en utilisant la commande pull
:
docker pull ubuntu
Pour consulter la liste des images dont nous disposons localement (soit parce
qu'on les a téléchargées, soit parce que nous les avons créées nous-même), on
utilise la commande images
:
docker images
Nous devrions constater la présence de deux images « Ubuntu », ayant un TAG
différent. Souvent, il existe plusieurs versions d'une même image. Pour Ubuntu
par exemple, nous avons la possibilité de lancer la version precise
, trusty
,
xenial
ou yakkety
.
Chaque image est identifiable par son Image ID unique ; les noms d'images ainsi que leurs tags sont, comme les tags Git, une manière humainement plus simple de faire référence aux identifiants.
Chaque nom d'image possède au moins un tag associé : latest. C'est le tag qui est automatiquement recherché lorsque l'on ne le précisez pas en lançant l'image.
Exécuter un programme dans un conteneur
Maintenant que nous avons à notre disposition l'image d'un conteneur Ubuntu, lançons-la !
La commande run
de Docker prend comme derniers arguments le programme à
lancer dans le conteneur ainsi que ses éventuels arguments. Essayons d'afficher
un Hello World :
docker run ubuntu /bin/echo "Hello World"
Dans notre exemple, c'est bien le /bin/echo
présent dans le conteneur qui est
appelé. Ce n'est pas le programme /bin/echo
de la machine hôte qui a été
transféré dans le conteneur.
Modifier un conteneur
À chaque fois que nous lançons un run
, un nouveau conteneur est créé à partir
de l'image que l'on a précisé (via un mécanisme de Copy-On-Write, c'est donc
très rapide et ne consomme pas beaucoup d'espace disque). Cela signifie que
lorsque nous exécutons une commande modifiant les fichiers d'un conteneur, cela
ne modifie pas l'image de base, mais crée une nouvelle image. Que nous pouvons
ensuite utiliser comme image de base.
Commençons par entrer dans un nouveau conteneur pour modifier l'image :
docker run -it ubuntu /bin/bash
Nous voilà maintenant dans le conteneur ! Il est assez épuré, il n'y a rien de
superflu : il n'y a même pas d'éditeur de texte : ni vim, ni emacs, même pas
vi
!
La première chose à faire est de télécharger la liste des paquets. En effet, afin de ne pas livrer de superflu, la liste des paquets et son cache ne sont pas inclues dans le conteneur.
apt-get update
Il peut arriver que des paquets présents dans l'image ne soient pas à jour. Afin de garder un environnement cohérent, il est recommandé de ne pas utiliser le gestionnaire de paquets pour mettre à jour les paquets présent de base, mais plutôt de contacter le mainteneur de l'image pour qu'il la mette à jour.
Installons maintenant un programme :
apt-get install nano
En attendant la fin de l'installation, jetons un œil à la commande dans un autre terminal :
docker ps
Cette commande liste les conteneurs actifs. Notez le Container ID ainsi que
le NAMES du conteneur du conteneur actuellement en cours d'installation de
nano
.
Lorsque l'installation de nano
est terminée, quittez l'image en tapant
exit
.
Sauvegardez votre image modifiée avec la commande commit
pour pouvoir
commencer directement de votre image avec nano
:
docker commit CONTAINER my_nano
En remplaçant CONTAINER
par le nom ou l'identifiant de votre
container. my_nano
est le nom que vous voudrez utiliser à la place
d'ubuntu
:
docker run -it my_nano /bin/bash
Vous constatez cette fois que vous pouvez lancer nano
, alors que vous ne
pouvez toujours pas le faire dans un conteneur issue d'une image ubuntu
!