image de mise en avant pour l'article mémo Docker

Mémo Docker

Temps de lecture estimé: 4 minutes

Après avoir passé un peu de temps sur Kubernetes, c’est un peu, surement, surdimensionné pour ce que je souhaite faire. D’autant plus que dans mon infrastructure, je n’ai qu’un seul serveur physique donc je ne profiterais même pas des avantages de la haute disponibilité et de la répartition de charges avec mon SPOF (single point of failure).

Même si ça me tentait pas mal d’avoir cette archi à la maison pour le fun et le proof of concept, je me rends bien compte que le ratio complexité(apprentissage) / avantages n’est pas assez alléchant pour moi.

Je reviens donc à une architecture cible beaucoup plus simple et je me concentre maintenant sur Docker. Certes ce n’est pas totalement les mêmes usages, mais au final je m’affranchis de toute la complexité de Kubernetes (qui au final peut utiliser Docker) tout en gardant une facilité de déploiement, une certaine scalabilité et surtout c’est beaucoup plus accessible…

j’ai déjà expérimenté un peu docker et ici je voulais reprendre les grandes idées et faire une sorte de mémo pour moi ou toute autre personne à qui ça pourrait servir, mais globalement le job est déjà très bien fait ici.

Donc c’est au final plus un partage. pour la suite, je reviendrai avec mes avancements

Lancer un conteneur avec une image

docker run image

par exemple pour une image générique de nginx

docker run nginx

si elle n’est pas présente localement, elle sera téléchargée à partir du Hub docker (ou autre hub perso si défini)

Lancer un conteneur détaché de la console

la problématique dans la majorité des cas c’est qu’en lançant directement avec la commande ci-dessus, le conteneur se lance et monopolise la console. on peut détacher le lancement de la console avec l’option –detach ou -d

docker run -d nginx
f7c4f986cf182ab4da9355579770a5066cdf40a0dc02b9fdc563ca95cc1ddb45

la commande renvoi l’id du conteneur créé, il va être utile pour plus tard

Lister tous les conteneurs en cours d’exécution

pour lister les conteneurs en cours d’exécution il y a plusieurs options docker container list ou docker ps

docker container list
CONTAINER ID   IMAGE                  COMMAND                  CREATED              STATUS              PORTS     NAMES
aa7145bb8217   nginx          "/docker-entrypoint.…"     About a minute ago     Up About a minute       80/tcp    busy_dhawan
f7c4f986cf18   nginx          "/docker-entrypoint.…"     2 minutes ago          Up 2 minutes            80/tcp    stupefied_hamilton
8caf8480cd0d   nginx          "/docker-entrypoint.…"     3 minutes ago          Up 3 minutes            80/tcp    cool_yalow
70e723bae1ba   nginx          "/docker-entrypoint.…"     5 minutes ago          Up 5 minutes            80/tcp    vigorous_brown
261bee6155a1   nginx          "/docker-entrypoint.…"     5 minutes ago          Up 5 minutes            80/tcp    keen_buck
d34238df64a8   nginx          "/docker-entrypoint.…"     5 minutes ago          Up 5 minutes            80/tcp    frosty_hofstadter

ou

docker ps

ça permet de retrouver quelques informations sommaires comme notamment l’id du conteneur

Renommer un conteneur

on peut voir que les noms des conteneurs nginx sont aléatoires (parce que le nom n’a pas été spécifié au lancement). On peut renommer les conteneurs avec

docker rename CONTAINER_ID|CONTAINER_NAME

par exemple

docker rename aa7145bb8217 webserver1

Spécifier un nom au lancement d’un conteneur

le plus pratique c’est quand même de spécifier le nom au lancement. Pour spécifier le nom du conteneur à son lancement, il faut utiliser l’option –name ou -n

docker run -d --name webserver20 nginx
2ec3b0a0031cdee705acc4f94bae6740fe5003de25e10891cfe848a583f6d975

Arrêter un conteneur en cours d’exécution

pour arrêter un conteneur (ou plusieurs) en cours d’exécution, il faut le stopper.

docker stop CONTAINER_ID|CONTAINER_NAME

par exemple

docker stop f7c4f986cf18 8caf8480cd0d

Lister tout les conteneurs, même ceux arrêtés

pour lister tous les containers, même ceux qui ont été stoppé, il faut lister en spécifiant l’option –all ou -a.

toujours 2 options possible docker ps ou docker container list (qui peut s’abréger en ls)

docker container ls -a

CONTAINER ID   IMAGE    COMMAND                  CREATED              STATUS                          PORTS               NAMES
2ec3b0a0031c   nginx    "/docker-entrypoint.…"   4 minutes ago        Exited (0) About a minute ago                       webserver20
aa7145bb8217   nginx    "/docker-entrypoint.…"   15 minutes ago       Exited (0) 3 minutes ago                            webserver10
f7c4f986cf18   nginx    "/docker-entrypoint.…"   15 minutes ago       Exited (0) 2 minutes ago                            stupefied_hamilton
8caf8480cd0d   nginx    "/docker-entrypoint.…"   16 minutes ago       Exited (0) 2 minutes ago                            cool_yalow
70e723bae1ba   nginx    "/docker-entrypoint.…"   19 minutes ago       Exited (0) About a minute ago                       vigorous_brown
261bee6155a1   nginx    "/docker-entrypoint.…"   19 minutes ago       Exited (0) About a minute ago                       keen_buck
d34238df64a8   nginx    "/docker-entrypoint.…"   19 minutes ago       Exited (0) About a minute ago                       frosty_hofstadter
6eb9f2593e57   nginx    "/docker-entrypoint.…"   19 minutes ago       Exited (0) 19 minutes ago                           webserver3
99b33a97cc72   nginx    "/docker-entrypoint.…"   19 minutes ago       Exited (127) 19 minutes ago                         webserver2
ece4fee27303   nginx    "/docker-entrypoint.…"   23 minutes ago       Exited (0) 21 minutes ago                           webserver

Supprimer un container

pour supprimer un (ou plusieurs) conteneur arrêté

docker remove CONTAINER_ID|CONTAINER_NAME

par exemple (en abréger avec rm)

docker rm webserver2 261bee6155a1 aa7145bb8217  

Supprimer tous les conteneurs arrêtés

docker container prune

Créer un réseau Docker

pour regrouper ses conteneurs sur un même réseau, ou les isoler. Il faudra leur attribuer des réseaux/network.

Pour créer un réseau basique de type bridge, il suffit de faire

docker network create mon_reseau

Lister les réseaux

pour avoir une liste des réseaux Docker

docker network list

Détail d’un réseau

pour retrouver des infos un peu plus détaillé sur un réseau, les containers qui l’utilisent, leurs IP etc etc, on peut inspecter le réseau

docker network inspect mon_reseau

Créer un volume Docker

les données d’un conteneur ne sont pas persistantes, un redémarrage et pouf ça disparait. Pour y remédier, il faudra utiliser des répertoires ou des fichiers locaux (sur le serveur) et gérer des volumes Docker. Volumes dans lesquels les données resteront.

pour créer un volume Docker tout simple

docker volume create --driver local --name mon_volume

Lister les volumes

tu commences à comprendre, ensuite pour les lister, c’est pareil que pour les containers et les réseaux (et les autres entités)

docker volume list

pour avoir un peu plus de détails sur un volume

docker volume inspect mon_volume

Copier des données dans, ou depuis un volume

pour rajouter des fichiers dans un volume, il existe plusieurs moyens, mais je voulais ici lister la petite commande docker cp bien pratique. Elle permet de copier un dossier ou un fichier vers un container (et son volume), mais aussi l’inverse, de récupérer un fichier ou un dossier d’un container (et possiblement d’un volume attaché au container) et le copier en local.

docker cp source destination

par exemple, si je veux récupérer des fichiers d’un container et les copier en local

docker cp mon_container:/chemin/fichier.txt  /home/anthony/monfichier.txt

bref, je ne vais pas lister toutes les commandes possibles et inimaginables, donc pour finir, si jamais tu n’as pas accès à un petit cheatsheet,  tu peux toujours RTFM,

docker --help

Voilà, c’est fini pour ce petit mémo!! en attendant je te dis à bientôt dans de nouvelles aventures!!!

Partagez l'article:
FacebookTwitterEmailLinkedIn

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.