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 !