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!!!