79 lines
2.5 KiB
Plaintext
79 lines
2.5 KiB
Plaintext
---
|
|
title: Déploiement avec Docker
|
|
description: Construire les images, les publier puis les exécuter sur le serveur.
|
|
---
|
|
|
|
Une fois l'application dockerisée, le déploiement suit une chaîne simple :
|
|
|
|
```text
|
|
build des images
|
|
↓
|
|
push vers un registry
|
|
↓
|
|
pull sur le serveur
|
|
↓
|
|
docker compose up
|
|
```
|
|
|
|
Une CI/CD, par exemple GitHub Actions, automatise cette chaîne.
|
|
|
|
## CI : garder la branche saine
|
|
|
|
Sur chaque push vers la branche principale :
|
|
|
|
| Job | Contenu |
|
|
| --- | --- |
|
|
| `backend-checks` | lint, build, tests unitaires et tests e2e |
|
|
| `frontend-checks` | lint, build et tests |
|
|
| `build-images` | construction des images avec le fichier Compose de production |
|
|
|
|
Le job de build vérifie que les Dockerfiles continuent de produire des images valides.
|
|
|
|
## CD : publier une version
|
|
|
|
Lorsqu'un tag de version est poussé :
|
|
|
|
| Job | Contenu |
|
|
| --- | --- |
|
|
| Vérifications | Les mêmes contrôles que la CI |
|
|
| `build-and-push` | Build des images et push vers Docker Hub, GHCR ou un autre registry |
|
|
| `deploy` | Copie de la configuration puis connexion SSH au serveur |
|
|
|
|
## Build une fois, run partout
|
|
|
|
Le serveur ne recompile rien. Il récupère exactement l'image construite et testée par la CI :
|
|
|
|
```bash
|
|
docker compose pull
|
|
docker compose up -d --no-build
|
|
docker image prune -f
|
|
```
|
|
|
|
`--no-build` garantit que le serveur lance les images récupérées sans reconstruire depuis le code source.
|
|
|
|
## image et build dans le Compose de production
|
|
|
|
```yaml
|
|
services:
|
|
backend:
|
|
image: registry.example.com/mon-app/backend:${IMAGE_TAG:-latest}
|
|
build:
|
|
context: ./backend
|
|
dockerfile: Dockerfile
|
|
```
|
|
|
|
Dans la CI, `build:` sert à construire puis pousser l'image. En production, le serveur utilise `image:` et `--no-build` pour exécuter le tag déjà publié.
|
|
|
|
Le serveur n'a besoin ni du code source, ni de Node.js, ni du toolchain de compilation. Il lui faut seulement Docker, le fichier Compose et un accès au registry.
|
|
|
|
## Ce que Docker apporte
|
|
|
|
- **Reproductibilité** : l'image testée par la CI est celle qui tourne en production.
|
|
- **Rollback simple** : revenir en arrière revient à redéployer le tag précédent.
|
|
- **Serveur minimal** : toutes les versions et dépendances vivent dans les images.
|
|
- **Immutabilité** : on remplace une image complète au lieu de modifier le serveur en place.
|
|
|
|
<Callout title="Principe de livraison" type="success">
|
|
Construis une fois et exécute partout. Une image versionnée est l'unité de livraison ; le tag identifie précisément la version déployée.
|
|
</Callout>
|