Je développe principalement en utilisant Visual Studio sur Windows. Le problème est qu'après un certain temps, Windows s'enlise et je dois réinstaller Windows. De même, le passage à de nouvelles machines est un problème.
La réinstallation de Windows est pénible car mon environnement de développement a beaucoup de dépendances (telles que des fichiers de configuration MSBuild supplémentaires, des extensions VS, npm, Java, etc.). Je n'imagine pas que je suis seul à avoir un système complexe, et sa mise en place prendrait probablement un jour minimum.
Je n'ai pas vraiment utilisé Docker, mais en théorie, il me semble que je pourrais configurer mon environnement de développement dans un conteneur Windows et ensuite l'envoyer (par exemple, copier sur mon ordinateur portable, installer une nouvelle installation Windows) et cela devrait être indolore .
Ce que je décris est-il possible? Y a-t-il des inconvénients, tels que les performances, la fiabilité? Autres pièges?
Réponses:
Ce n'est pas un problème rare, mais Docker n'est pas vraiment le bon outil pour le résoudre. Les conteneurs en général (y compris Docker) sont destinés à fournir un runtime d'application pour un seul processus , tel qu'un serveur Web, et non pour un scénario multi-processus tel qu'un environnement de développement. Cela peut être fait, mais ce n'est pas une solution très élégante.
Une meilleure approche (et plus courante) consiste à créer des machines virtuelles via un hyperviseur traditionnel tel que VirtualBox ou Hyper-V (puisque vous êtes sous Windows). Un workflow typique est:
Vagrant est également un outil fantastique pour faire une grande partie de ce qui précède de manière plus structurée.
Un avantage secondaire de tout cela est que vous disposez désormais d' environnements standardisés qui peuvent être partagés avec toute votre équipe, ce qui évite à tout le monde les efforts. Ceci est particulièrement utile pour intégrer rapidement de nouvelles personnes.
Revenons à votre question initiale, Docker n'est pas vraiment destiné à cela, mais si vous aviez un environnement de développement suffisamment petit (par exemple PHP sur Linux), vous pourriez le faire dans un conteneur, et l'avantage serait une image beaucoup plus petite (potentiellement moins de 100 Mo contre plusieurs Go pour une machine virtuelle Windows avec disque virtuel).
la source
pas dans un conteneur docker mais oui dans n conteneurs dockers.
Alors que vous pouviez - théoriquement - assembler tout votre environnement de développement dans un seul conteneur, docker n'était pas censé le faire.
Au lieu de cela, vous devez déployer chaque service dans des conteneurs séparés, en utilisant docker compose , en gérant l'ensemble de votre infrastructure dans un seul fichier, où chaque service aura son propre fichier journal, espace utilisateur, réseau, etc.
Permettez-moi de vous donner un exemple, ceci est un brouillon de mon
docker-compose.yml
Il existe un proxy nginx (myproxy), deux bases de données PostgreSQL similaires (mydb1 et 2), un ancien serveur d'applications Web Java (www), un conteneur de jetée Java qui fournit un service Web de repos et enfin un conteneur de suffixe SMTP très simple.
Tout démarre - généralement :) - avec
docker-compose up
, soit sur ma machine de développement, soit en production; les fichiers journaux sont regroupés en un seul fichier facile à lire et il est possible de répliquer localement presque toutes les fonctionnalités avec la garantie que, si cela fonctionne sur mon ordinateur portable, cela fonctionnera.la source
J'utilise des VM VirtualBox pour ce genre de chose.
La portabilité d'avoir votre environnement de développement dans un conteneur est pratique, mais ce qui est vraiment sympa, c'est que je peux prendre un instantané de la chose avant toute tentative de mise à niveau, et si je le gâche, ce n'est pas un problème de se replier et de recommencer.
Je trouve également utile de le faire parce que je travaille fréquemment avec plusieurs versions de choses comme Qt, et je n'ai pas envie de comprendre comment faire cohabiter les deux versions - au lieu de cela, je les mets simplement sur différentes machines virtuelles et Je n'ai pas à me soucier des interactions car j'ai installé quelque chose de manière incorrecte.
la source