4 votes

Comment modifier le code source sans reconstruire l'image dans Docker ?

Quelle est la meilleure pratique pour utiliser un conteneur Docker pour le développement et la production ?

Disons que je veux que mes modifications soient appliquées automatiquement pendant le développement sans avoir à reconstruire et redémarrer les images. D'après ce que j'ai compris, je peux injecter du volume pour cela lors de l'exécution du conteneur.

docker run -v `pwd`/src:/src --rm -it username/node-web-app0

pwd/src représente le code source du répertoire. Cela fonctionne bien jusqu'à présent.

Mais comment livrer le code à la production ? Je pense que c'est pire de garder le code avec les binaires dans le conteneur docker. Dois-je créer un autre fichier docker similaire qui utilisera COPY à la place ? Ou bien il est préférable de déployer le code source séparément comme pour le dev-mode et de le monter dans le docker.

5voto

Ignacio Millán Points 4200

La meilleure pratique consiste à construire une nouvelle image docker pour chaque version de votre code. Cela présente de nombreux avantages dans les environnements de production, comme des déploiements plus rapides, l'indépendance vis-à-vis des autres systèmes, des retours en arrière plus faciles, l'exportabilité, etc.

Il est possible de le faire au sein du même Dockerfile, en utilisant les constructions en plusieurs étapes .

Voici un exemple simple pour une application NodeJS :

FROM node:10 as dev
WORKDIR /src
CMD ["myapp.js"]

FROM node:10
COPY package.json .
RUN npm install
COPY . .

Notez que ce Dockerfile est uniquement destiné à des fins de démonstration, il peut être amélioré de nombreuses façons.

Lorsque vous travaillez dans un environnement de développement, utilisez les commandes suivantes pour construire l'image de base et exécuter votre code avec un dossier monté :

docker build --target dev -t username/node-web-app0 .
docker run -v `pwd`/src:/src --rm -it username/node-web-app0

Et lorsque vous êtes prêt pour la production, il suffit d'exécuter docker run sans l'option --target pour construire l'image complète, qui contient le code :

docker build -t username/node-web-app0:v0.1 .
docker push username/node-web-app0:v0.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X