Docker compose
Même si la commande docker
est très puissant, il y a beaucoup de commandes à retenir.
Autant créer un fichier de configuration, qui précise l'image à utiliser, le volumes à monter etc.
Ce fichier s'appelle docker-compose.yml
et il est en format yaml
:
Créez, dans le même répertoire que votre fichier app.js
, un fichier qui s'appelle docker-compose.yml
:
Ensuite on peut lancer notre service avec :
Cette fois si, la configuration du Container y compris l'image à utiliser, les volumes à monter et la commande à exécuter, est lu du fichier.
Il est possible de préciser plusieurs services dans le même fichier docker-compose.yml
et les lancer indépendamment. Docker créera un Container pour chaque service.
La plupart du temps, on aimerait lancer un service qui agit comme serveur, c'est à dire, il attend des messages réseau (et non pas des éntrées claviers). Par exemple :
Un serveur SQL (base de données)
Un API
Un site en PHP qui est servi par Apache
...
On peut préciser l'ensemble dans un docker-compose.yml
, puis contrôler le tout avec :
Notre projet VSCode
Regardez dans le fichier .devcontainer/docker-compose.yml
du projet du cours :
Dans la première version de ce fichier, j'avais construit mon Container en local, c'est à dire, j'ai précisé un Dockerfile (qui existe dans le même dossier), qui contient toutes les instructions pour construire mon Container. Les lignes commentées (build
), permet de construire automatiquement l'image à partir du Dockerfile au lancement de docker compose
.
Un fois stable, j'ai plutôt déployé mon image dans un dépôt docker privée (Container Registry). Ceci peut être sur Docker Hub (on peut avoir un compte gratuit, mais il est limité en nombre d'utilisateurs). Mon fournisseur Cloud, Scaleway, propose aussi l'option de Container Registry. J'ai donc construit et déploy mon Image avec les instructions suivantes :
J'ai ensuite remplacé les lignes build
par image
, en précisant l'identifiant de l'image.
En fait, quand on utilise Reopen in Container
, Docker fait le suivant :
L'image est récupérée du Container Registry
Un Container est lancé, avec la command
bash
qui reste continuellement ouvert grâce à une boucle infinieOn monte le dossier parent de
.devcontainer
à l'emplacement/home/hetic
dans le ContainerAprès VSCode établit une connexion avec ce Container, qui nous permet d'ouvrir un Terminal comme si on était dans Ubuntu.
Regardez le fichier Dockerfile
. Il s'agit d'une liste d'instructions qui explique comment créer une image personnalisée.
En ce concerne le Dockerfile, on n'est pas sensé tout comprendre pour le moment, mais on peut déjà dire que notre base de départ est l'image ubuntu:22.04
:
Mises à jour des images
Si jamais une Image se met à jour dans le dépôt on peut facilement la récupérer :
Dernière mise à jour