Hello World

Hello World

L'objectif de cet exercice est de construire ensemble notre première image Docker.

En informatique la coutume veut que cela soit un Hello World. L'objectif ici est donc de constuire une image très simple dont le but va être d'afficher un message prédéfini.

Nous allons nous baser sur le Dockerfile suivant :

1
FROM busybox:latest
2
CMD echo Hello World!!

Question

Essayez de deviner ce que font chacune des deux lignes de ce Dockerfile

Solution

1
FROM busybox:latest

Cette première instruction permet de choisir une image de base sur laquelle va reposer notre image personnalisée.

Dans notre cas, nous avons choisi d'utiliser la distribution busybox connue pour sa légèreté

1
CMD echo Hello World!!

Cette seconde instruction est en charge de la commande à lancer au démarrage de notre conteneur. Ici, nous allons afficher dans la console Hello World

Question

À l'aide de la commande docker build, construisez votre image

Indice

La commande docker build a la syntaxe suivante :

1
docker build <repertoire_du_dockerfile>

Solution

1
~ docker build .
2
Sending build context to Docker daemon  2.048kB
3
Step 1/2 : FROM busybox:latest
4
latest: Pulling from library/busybox
5
57c14dd66db0: Pull complete
6
Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
7
Status: Downloaded newer image for busybox:latest
8
 ---> 3a093384ac30
9
Step 2/2 : CMD echo Hello World!!
10
 ---> Running in a6284278314d
11
Removing intermediate container a6284278314d
12
 ---> 70cd93b6b962
13
Successfully built 70cd93b6b962

Question

Lancez un conteneur basé sur votre image

Indice

On utilise la commande docker run

Indice

L'image à utiliser est indiquée à la toute fin de la commande de build. Dans notre cas 70cd93b6b962

Solution

1
~ docker run 70cd93b6b962
2
Hello World!!
Remarque

Nous avons pu créer notre propre image personnalisée basée sur la distribution busybox et étendre cette image pour construire notre Hello World !!.

C'est une application simple, mais les images réalisées dans des projets de plus large envergure utilisent la même technologie.

Question

Intéressons nous maintenant à la liste de nos images. Lancez la commande suivante :

1
docker images

Que remarquez vous ?

Solution

1
docker images
2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
3
<none>              <none>              70cd93b6b962        1  minutes ago      1.2MB
4
mon-image           latest              3e12e812ffba        37 minutes ago      101MB
5
busybox             latest              3a093384ac30        7 days ago          1.2MB
6
debian              stretch             de8b49d4b0b3        10 days ago         101MB

La nouvelle image que l'on vient de construire n'a pas de nom ni de tag.

Question

Recommencez le build de l'image mais cette fois ci en utilisant l'option -t de la commande docker build

Indice

1
~ docker build -t <nom-image> .

Solution

1
~ docker build -t helloworld .
2
Sending build context to Docker daemon  2.048kB
3
Step 1/2 : FROM busybox:latest
4
 ---> 3a093384ac30
5
Step 2/2 : CMD echo Hello World!!
6
 ---> Using cache
7
 ---> 70cd93b6b962
8
Successfully built 70cd93b6b962
9
Successfully tagged helloworld:latest
1
~ docker images
2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
3
helloworld          latest              70cd93b6b962        19 minutes ago      1.2MB
4
mon-image           latest              3e12e812ffba        41 minutes ago      101MB
5
busybox             latest              3a093384ac30        7 days ago          1.2MB
6
debian              stretch             de8b49d4b0b3        10 days ago         101MB

On remarque maintenant que notre image à l'id 70cd93b6b962 est maintenant référencé avec un nom et un tag. Par défaut, si aucun tag n'est spécifié, c'est latest qui va être utilisé par docker. Vous pouvez spécifier un tag en utilisant les ":" après votre nom d'image. Il est recommandé de toujours construire une image en lui spécifiant un nom.

1
docker build -t helloworld:v1 .

Par défaut lors de la construction d'une image, Docker va chercher dans le dossier courant un fichier nommé Dockerfile (attention à la case). Il est possible d'utiliser l'option -f pour spécifier un autre nom de fichier pour notre Dockerfile.