Docker les bases gérer ses images et ses conteneurs (Article 2)

Salut 😀 second article sur la partie Docker. Dans ce tuto nous verrons qu’est-ce qu’une image et qu’est ce qu’un conteneur. On va voir ensuite comment gérer ses images et ses conteneurs.

1. Qu’est ce qu’une image ? Qu’est ce qu’un conteneur ?

image : une image pourrait s’apparenter au binaire de l’application ce qui va être exécuté(instancier) pour créer le conteneur.

conteneur : un conteneur (voir l’article 1 aussi)pourrait s’apparenter au processus exécuté.

2. Les commandes de bases

Rechercher des images Docker :

Exemple ici je recherche des images Apache (ou plutôt httpd pour l’image officielle) :

root@DockerSAVOIRITLAB:~# docker search apache

On voit que l’image officielle est httpd(entre autres).

Téléchargez une image :

root@DockerSAVOIRITLAB:~# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
f7ec5a41d630: Pull complete 
d1589b6d8645: Pull complete 
83d3755a8d28: Pull complete 
f8459b08e404: Pull complete 
30fabbf5a067: Pull complete 
Digest: sha256:a6e472ad921c93d9fc2cbe2ff07560b9a526c145c4e10faff3aeb28c48cce585
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

Je peux désormais afficher mes images sur ma machine :

root@DockerSAVOIRITLAB:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    0b932df43057   2 weeks ago   138MB

On observe que j’ai une image actuellement celle que j’ai télécharger.

Je vais télécharger 3 autres image nginx, cenots et ubuntu:

root@DockerSAVOIRITLAB:~# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f7ec5a41d630: Already exists 
aa1efa14b3bf: Pull complete 
b78b95af9b17: Pull complete 
c7d6bca2b8dc: Pull complete 
cf16cd8e71e0: Pull complete 
0241c68333ef: Pull complete 
Digest: sha256:75a55d33ecc73c2a242450a9f1cc858499d468f077ea942867e662c247b5e412
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest


root@DockerSAVOIRITLAB:~# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
345e3491a907: Pull complete 
57671312ef6f: Pull complete 
5e9250ddb7d0: Pull complete 
Digest: sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

root@DockerSAVOIRITLAB:~# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

J’aiffiche les images disponibles en locale :

rootroot@DockerSAVOIRITLAB:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       latest    7e0aa2d69a15   39 hours ago   72.7MB
nginx        latest    62d49f9bab67   11 days ago    133MB
httpd        latest    0b932df43057   2 weeks ago    138MB
centos       latest    300e315adb2f   4 months ago   209MB

Supprimer une image (ubuntu par exemple ) :

root@DockerSAVOIRITLAB:~# docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
Deleted: sha256:7e0aa2d69a153215c790488ed1fcec162015e973e49962d438e18249d16fa9bd
Deleted: sha256:3dd8c8d4fd5b59d543c8f75a67cdfaab30aef5a6d99aea3fe74d8cc69d4e7bf2
Deleted: sha256:8d8dceacec7085abcab1f93ac1128765bc6cf0caac334c821e01546bd96eb741
Deleted: sha256:ccdbb80308cc5ef43b605ac28fac29c6a597f89f5a169bbedbb8dec29c987439

Il ne me reste plus donc que 3 images :

root@DockerSAVOIRITLAB:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    62d49f9bab67   11 days ago    133MB
httpd        latest    0b932df43057   2 weeks ago    138MB
centos       latest    300e315adb2f   4 months ago   209MB

3. Créer et gérer ses conteneurs

Lancer un conteneur :

root@DockerSAVOIRITLAB:~# docker run archlinux
Unable to find image 'archlinux:latest' locally
latest: Pulling from library/archlinux
af673a1a7ea6: Pull complete 
5f5707973f57: Pull complete 
Digest: sha256:8035b19f13374fa96784a7177887d6ef6ea8bec6d2742c1a410c19034438e049
Status: Downloaded newer image for archlinux:latest

Le problème avec cette commande c'est que le conteneur s’exécute puis se stop.

Remarque: Comme je n'ai pas l'image en local il me la télécharge.

Lancer un conteneur à partir d’une image local (en mode détaché pour qu’il ne s’arrête pas):

root@DockerSAVOIRITLAB:~# docker run -d -it centos

-d : détaché
-it : terminal
-i : interactive
-t : tty (terminal)

Afficher les conteneurs en cours d’éxécution :

root@DockerSAVOIRITLAB:~# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
c660c184d5d1   centos    "/bin/bash"   3 seconds ago   Up 2 seconds             romantic_einstein

Voir tous les conteneurs y compris ce qui ne sont pas en cours d’exécution:

root@DockerSAVOIRITLAB:~# docker ps -a
CONTAINER ID   IMAGE       COMMAND           CREATED          STATUS                     PORTS     NAMES
ecb15afa1b49   archlinux   "/usr/bin/bash"   6 minutes ago    Exited (0) 6 minutes ago             priceless_agnesi
c660c184d5d1   centos      "/bin/bash"       17 minutes ago   Up 17 minutes                        romantic_einstein

On voit mon conteneur archlinux qui a le status excited et mon autre conteneur centos qui est up depuis 17 minutes.

S’attacher à un conteneur :

root@DockerSAVOIRITLAB:~# docker attach romantic_einstein
[root@c660c184d5d1 /]# 

Je suis maintenant dans mon conteneur pour en sortir je pourrai faire « exit » mais si je fais cela mon conteneur sera stopper pour éviter cela je vais faire : Ctrl + p q.

Stopper un conteneur :

root@DockerSAVOIRITLAB:~# docker stop romantic_einstein 
romantic_einstein

J’ai stoppé mon conteneur créer à partir de l’image centos on peut voir que je n’ai plus de conteneurs en cours d’exécution :

root@DockerSAVOIRITLAB:~# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@DockerSAVOIRITLAB:~#

Start un conteneur


root@DockerSAVOIRITLAB:~# docker start romantic_einstein 
romantic_einstein

root@DockerSAVOIRITLAB:~# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
c660c184d5d1   centos    "/bin/bash"   31 minutes ago   Up 9 seconds             romantic_einstein


Supprimer un conteneur :

root@DockerSAVOIRITLAB:~# docker rm priceless_agnesi 
priceless_agnesi

Si j’affiche mes conteneurs il me reste plus qu’un conteneur:

root@DockerSAVOIRITLAB:~# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS              PORTS     NAMES
c660c184d5d1   centos    "/bin/bash"   32 minutes ago   Up About a minute             romantic_einstein
root@DockerSAVOIRITLAB:~#

Lancer un conteneur en mappant le port http sur celui de l’hôte :

root@DockerSAVOIRITLAB:~# docker run -d -P httpd
54e8556f23678e3991e4d04dbade62a8f9b32b8c0825a0860757f54831c43e43

Pour connaître quel est le port externe sur la machine hôte il suffit de faire :

root@DockerSAVOIRITLAB:~# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                   NAMES
54e8556f2367   httpd     "httpd-foreground"   59 seconds ago   Up 58 seconds   0.0.0.0:49154->80/tcp   optimistic_haslett
c660c184d5d1   centos    "/bin/bash"          34 minutes ago   Up 3 minutes                            romantic_einstein

Ici c’est le port 49154 de ma machine 192.168.1.204

Connectons nous dessus :

C’est la fin de ce tuto à plus tard pour un prochain article sur Docker 🙂 !