Mises à jour :
Poste original :
Il y a quelque chose que je ne comprends pas lorsque je développe une application en utilisant des conteneurs Docker.
C'est bon, ce n'est pas quelque chose d'insignifiant. Essayez de voir la situation dans son ensemble, il s'agit de créer une Pipeline de développement (ou Pipeline CI/CD si vous aimez utiliser les termes Intégration continue / livraison continue ).
L'image ci-dessus provient de [2]
Limitations lors de la mise en place d'un environnement de développement local
Supposons que je développe une application java et que je configure un conteneur java avec une image de base jdk 8, je dois encore installer java 8 jdk sur ma machine de développement locale, puisque l'IDE que je vais utiliser va chercher les bibliothèques d'exécution sur la machine locale et non sur le conteneur docker.
Cette option peut vous causer un problème déjà mentionné : elle peut fonctionner sur votre environnement de développement local et échouer ailleurs parce que vous avez oublié d'ajouter une bibliothèque, une dépendance, une modification mineure que vous avez effectuée sans faire attention et sans penser à l'ajouter à votre environnement Docker.
Vous pouvez vous en tenir à Docker pendant le développement
Une approche qui résout le problème ci-dessus est de s'appuyer sur docker [3] afin de configurer l'environnement que vous souhaitez utiliser. Cela signifie que chaque fois que vous modifiez quelque chose, vous devrez docker build
une nouvelle image et docker run
un nouveau conteneur basé sur cette image. Comme d'autres l'ont mentionné, pour définir la façon dont vos images vont être construites, vous devrez utiliser la fonction Dockerfiles
. Et si votre application comporte différents conteneurs interconnectés, vous devrez définir tous ces éléments (réseaux, liens, dépendances) à l'intérieur d'un fichier de type docker-compose.yml
fichier. Le processus répétitif de construction et d'exécution sera alors le travail de votre IDE...
IDEs et plugins/add-ons
de [1]
:
IDE
Versions de Docker ne fournissent pas d'IDE natif pour le développement avec Docker . L'interface principale est l'API en ligne de commande. Toutefois, la plupart des principaux IDE (NetBeans, Eclipse, IntelliJ, Visual Studio) prennent en charge Docker par le biais de plugins ou de modules complémentaires.
Par exemple, de [2]
:
Docker Labs - Tutoriels sur les outils de développement
Vous pouvez trouver quelques directives en fonction de votre cas (IDE, langue...) ici :
Volumes partagés | Rechargement à chaud | "surveillance" des changements de fichiers
Je pense que cette approche correspond à votre titre qui dit "développer sur un conteneur docker" et je veux dire/comprendre le cas où quelqu'un a un conteneur en cours d'exécution avec un volume partagé et chaque fois qu'un changement se produit dans le code (en utilisant l'IDE), cela affecte le conteneur directement. Peut-être cela fonctionnera-t-il dans un cas et aura-t-il des limites dans d'autres cas. C'est à vous de faire vos évaluations et de choisir votre voie.
Mes sources sont :
1 votes
Votre machine locale est votre environnement de développement local, n'est-ce pas ? Donc, finalement, une fois que vous avez terminé le développement, vous voulez le déployer en utilisant des conteneurs ?
2 votes
Cela dépend de la quantité de Docker que votre équipe va utiliser. L'un des arguments de vente de Docker est la standardisation, de sorte qu'aucun développeur ne puisse dire " ça marche sur ma machine, pourquoi ça ne marche pas sur la vôtre ? ". Si un conteneur "dev" est standardisé, et que tout le monde l'utilise, alors les bibliothèques et les outils de chacun devraient correspondre.
1 votes
@Shanky Je veux développer sur ma machine locale et faire les tests sur le conteneur au fur et à mesure que je développe. Disons que je modifie un fichier dans mon projet et que j'exécute les modifications sur le conteneur.
0 votes
@HopewellMutanda Eh bien, IMO vous cherchez à avoir le meilleur des deux mondes. L'idée des conteneurs est que vous construisez ce que vous voulez et quand vous en êtes satisfait, vous le conteneurisez. Pour ce qui est d'une application Java, si vous avez soigneusement défini l'environnement à l'intérieur de votre conteneur, il est peu probable que l'application se comporte différemment de votre configuration de développement locale.