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 ou git pull et se déplacer dans le répertoire avec cd
  • S'assurer que le daemon Docker tourne : sudo systemctl status docker devrait indiquer running, sinon il est nécessaire d'exécuter sudo systemctl start docker (une fois) ou sudo 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