Docker image
Dernière mise à jour
Dernière mise à jour
Nous voulons construire notre API, supprimer toutes les dépendances utilisées uniquement pour le développement et compiler le tout dans une image Docker qui peut être déployée localement ou dans le nuage en tant que conteneur.
Tout d'abord, vous remarquerez que nous pouvons compiler notre projet Typescript existant en Javascript pur :
Vous noterez la sortie créée dans build
.
Vous pouvez essayer d'exécuter votre serveur comme n'importe quelle autre application node :
Mais cela provoquera une erreur concernant nos alias de chemin comme @controller
ou @orm
. Nous devons les résoudre dans le cadre de notre construction :
Post-traiter les fichiers construits à l'aide de :
Et redémarrez le serveur :
Votre serveur devrait fonctionner normalement. Essayez pour tester.
Nous aurons aussi besoin de copier tous les fichiers statiques dans le répertoire build/public
(comme notre swagger.json
généré).
Combinons toutes nos étapes de construction en un seul script npm
dans package.json
.
Tout d'abord, nous avons besoin d'outils pour nettoyer l'ancien répertoire de construction et copier les fichiers :
Nous pouvons maintenant créer un script pour construire notre API (package.json
) :
Nous pouvons maintenant construire notre projet entier avec :
Nous voulons maintenant créer une image Docker qui inclut Node 20, notre répertoire de construction et seulement les dépendances nécessaires à l'exécution de notre projet (à l'exception des outils de développement). L'idée est de créer la plus petite image Docker possible pour faire fonctionner notre projet.
Créons un fichier Docker dans config/docker/Dockerfile.prod
:
Notez qu'il s'agit d'une construction en deux phases. Nous créons d'abord un conteneur dans lequel nous allons construire notre projet. Ensuite, nous créons une seconde image propre, en copiant seulement le contenu du répertoire build
dans le premier conteneur. Nous installons aussi seulement les paquets de production de nos dépendances avec npm install --omit=dev
. Enfin, nous démarrons notre serveur avec le script npm run start-api
. C'est un script que nous n'avons pas encore ajouté à notre package.json
:
Enfin, ajoutez le fichier .dockerignore
à la racine de votre projet pour ignorer tous les fichiers que vous ne voulez pas dans vos images :
Dans un terminal hors de votre DevContainer, naviguez jusqu'à la racine de votre projet et exécutez ce qui suit :
Nous donnons à l'image une balise api
pour pouvoir y faire référence plus tard.
Cela permettra de construire une image multiplateforme ! Vérifiez que votre image existe dans votre dépôt Docker local :
Vous pouvez également vérifier le contenu de l'image :
Vous verrez le contenu de votre image ! Tapez exit
pour quitter le conteneur.
Pour exécuter votre image en tant que conteneur local (assurez-vous que le serveur est arrêté dans votre DevContainer !) :
Vous devriez obtenir vos informations, mais la base de données n'est pas connectée. C'est normal, cette image n'a pas accès à notre base de données déployée avec notre Dev Container !
Localement, ou sur un serveur distant, nous pouvons vouloir configurer l'ensemble de notre système en utilisant Docker Compose. Le fichier de configuration ressemblerait à ce qui suit :
Notez l'utilisation de variables d'environnement, que notre code mentionne en utilisant process.env.
. Nous remplaçons effectivement nos variables par d'autres pour l'utilisation en production ! **N'utilisez jamais en production les mêmes secrets qu'en développement !
Vous pouvez démarrer votre environnement en utilisant :
Vérifiez vos nouveaux services :
Obtenez l'ID du service mariadb
.
Initialisez votre base de données avec :
Pour arrêter tous vos services :
Essayez de consulter le lien
Essayez de consulter le lien , vous devriez constater que la base de données est maintenant connectée !