Workflow Docker - Yolino/t211-dbox-fm GitHub Wiki
Introduction
Toutes les sections de l'application sont isolées dans des conteneurs Docker, ce qui implique notamment que les packages sont installés directement sur le conteneur et non sur la machine hôte, assurant la cohérence de l'application peu importe le système hôte.
Installation de Docker et Docker Compose
Si ce n'est pas déjà fait, il est nécessaire d'installer le Docker Engine et Docker Compose. Il existe également une alternative en interface graphique, Docker Desktop.
Aperçu des fichiers liés à Docker
Dockerfiles
Les fichiers de type Dockerfile
permettent de décrire les actions nécessaires pour créer l'image d'un conteneur (un peu comme le rapport entre un code source et son fichier compilé). En voici un exemple pour notre front-end en React :
FROM node:lts-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
ENV NODE_ENV=development
EXPOSE 3000
CMD ["npm", "start"]
Dans cet exemple, on constate que le conteneur se base sur une image Alpine Linux configurée pour une utilisation de NodeJS. Après avoir spécifié le répertoire courant, on copie les deux fichiers package indiquant toutes les dépendances du projet. Il est ensuite nécessaire d'installer tous ces packages via npm
(Node Package Manager), qui ira consulter les fichiers package.json
et package-lock.json
. Le conteneur est ensuite destiné à exposé son port 3000 (serveur web de développement React), et à servir les pages web.
Compose
Le fichier compose.yaml
permet d'orchestrer le lancement de nos différents conteneurs beaucoup plus simplement. Voici un simple exemple :
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
volumes:
- ./frontend:/app:cache
- dev_node_modules:/app/node_modules
ports: "3000:3000"
Pour frontend
, ce fichier indique l'emplacement logique du conteneur ainsi que le nom de son dockerfile. Il est aussi important de noter qu'au lancement du Docker, les dossiers ./frontend
(hôte) et /app
(conteneur) vont être reliés par un bind mount, permettant à ce dernier de disposer du code source de l'application en temps réel. La ligne suivante indique que les packages installés resteront isolés au sein du conteneur sans être installés sur la machine hôte. Le fichier indique également que le port 3000 du conteneur sera mappé au port 3000 de l'hôte, rendant l'application disponible en http://localhost:3000
.
Utilisation
Voici les étapes nécessaires afin de créer et démarrer les conteneurs de l'application :
- Télécharger la dernière version du code source si besoin, via
git clone
ougit pull
et se déplacer dans le répertoire aveccd
- S'assurer que le daemon Docker tourne :
sudo systemctl status docker
devrait indiquerrunning
, sinon il est nécessaire d'exécutersudo systemctl start docker
(une fois) ousudo systemctl enable docker
(au démarrage de la machine) - Exécuter la commande
sudo docker compose up
. De nouvelles images de conteneurs devraient être automatiquement créées si le code a subi des modifications, et les conteneurs vont être démarrés. Note : l'option--build
peut forcer l'image a être recréée - L'application devrait maintenant être fonctionnelle et disponible depuis votre navigateur en
localhost:3000
. Toutes les modifications dans votre repository local mettront à jour les conteneurs