Agence web » Actualités du digital » Comment ancrer une application React –

Comment ancrer une application React –

Graphique des logos Docker et React

La conteneurisation de vos projets avec Docker simplifie l’expérience de développement et facilite le déploiement simple dans les environnements cloud. Voyons comment nous pouvons empaqueter un site React en tant que conteneur Docker.

Cet article se concentre sur les projets qui ont été amorcés à l’aide de create-react-app (ARC). Si vous avez éjecté votre configuration CRA ou si vous utilisez un processus de création personnalisé, vous devrez ajuster le npm run build commande en conséquence.

Les images Docker sont créées via un Dockerfile. Cela définit une image de base à utiliser, telle que le serveur Web Apache. Vous répertoriez ensuite une série de commandes qui ajoutent des packages, appliquent les modifications de configuration et copient les fichiers nécessaires à votre application.

Définir nos besoins

L’ARC comprend un système intégré de création et de rechargement en direct, auquel vous accédez via npm run start. Cela vous permet d’itérer rapidement sur votre site pendant le développement.

Lors du passage à la production, vous devez compiler vos ressources statiques en utilisant npm run build. Cela produit des ensembles HTML, CSS et JavaScript minifiés dans votre build annuaire. Ces fichiers sont ce que vous téléchargez sur votre serveur Web.

Une approche de base de Dockerising pourrait être de npm run build localement. Vous copiez ensuite le contenu du build dans votre image Docker – en utilisant une image de base de serveur Web – et appelez-le un jour.

Cette approche ne s’adapte pas bien, en particulier lors de la création de votre image Docker dans un environnement CI. Le processus de construction de votre application n’est pas complètement encapsulé dans la construction du conteneur, car il dépend de l’externe npm run build commander. Nous allons maintenant passer à un exemple plus complet où toute la routine s’exécute dans Docker.

Un Dockerfile pour l’ARC

FROM node:latest AS build
WORKDIR /build

COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm ci

COPY public/ public
COPY src/ src
RUN npm run build

FROM httpd:alpine
WORKDIR /var/www/html
COPY --from=build /build/build/ .

Cette Dockerfile incorpore tout le nécessaire pour conteneuriser entièrement le projet. Il utilise les builds multi-étapes de Docker pour exécuter d’abord la build React, puis copier la sortie dans un alpine Conteneur de serveur Apache. Cela garantit que l’image finale est aussi petite que possible.

La première section du fichier définit l’étape de construction. Il utilise l’image de base officielle de Node.js. La package.json et package-lock.json les fichiers sont copiés. npm ci est ensuite utilisé pour installer les packages npm du projet. ci est utilisé à la place de install car il force une correspondance exacte avec le contenu de package-lock.json.

Une fois les dépendances installées, le public et src les répertoires sont copiés dans le conteneur. Les dossiers sont copiés après le npm ci car ils sont susceptibles de changer beaucoup plus fréquemment que les dépendances. Cela garantit que la construction peut tirer pleinement parti de la mise en cache des couches de Docker – la solution potentiellement coûteuse npm ci La commande ne sera exécutée que si la package.json ou package-lock.json les fichiers changent.

La dernière étape de cette étape de construction consiste à npm run build. L’ARC compilera notre application React et placera sa sortie dans le build annuaire.

La deuxième étape de la Dockerfile est beaucoup plus simple. La httpd:alpine l’image de base est sélectionnée. Il inclut le serveur Web Apache dans une image qui pèse environ 5 Mo. Le code HTML, CSS et JavaScript compilé est copié hors du conteneur de l’étape de construction et dans l’image finale.

Utilisation de l’image Docker

Utilisez le docker build commande pour construire votre image:

docker build -t my-react-app:latest .

Cela construit l’image et la marque comme my-react-app:latest. Il utilise le Dockerfile trouvé dans votre répertoire de travail (spécifié comme .).

La construction peut prendre quelques minutes. Les builds suivants seront plus rapides, car des couches comme le npm ci La commande sera mise en cache entre les exécutions.

Une fois votre image construite, vous êtes prêt à l’utiliser:

docker run -d -p 8080:80 my-react-app:latest

Docker créera un nouveau conteneur en utilisant le my-react-app:latest image. Le port 8080 sur l’hôte (votre machine) est lié au port 80 dans le conteneur. Cela signifie que vous pouvez visiter http://localhost:8080 dans votre navigateur pour voir votre projet React! La -d l’indicateur est présent pour que le conteneur s’exécute en arrière-plan.

Passer à NGINX

L’exemple ci-dessus utilise Apache mais vous pouvez facilement passer à NGINX à la place.

FROM nginx:alpine
COPY --from=build /build/build/ /usr/share/nginx/html

Vous pouvez adopter des serveurs Web alternatifs de la même manière; comme l’ARC produit une sortie complètement statique, vous avez une grande flexibilité dans la sélection du mode d’hébergement de votre site. Copiez le contenu du /build/build répertoire du build placez-vous dans le répertoire HTML par défaut du logiciel serveur choisi.

Avantages de cette approche

L’utilisation de Docker pour non seulement encapsuler votre version finale, mais également pour créer la version elle-même, donne à votre projet une portabilité complète dans les environnements. Les développeurs n’ont besoin que de Docker pour créer et exécuter votre site React.

De manière plus réaliste, cette image est prête à être utilisée avec un serveur CI pour créer des images de manière automatisée. Tant qu’un environnement Docker est disponible, vous pouvez convertir votre code source en une image déployable sans aucune intervention manuelle.

En utilisant des versions en plusieurs étapes, l’image finale reste rationalisée et ne devrait avoir que quelques mégaoctets. Le beaucoup plus grand node image n’est utilisée que pendant la phase de compilation, où Node et npm sont nécessaires.

★★★★★