web-dev-qa-db-fra.com

Utiliser un IDE lors du développement sur un conteneur Docker

Il y a quelque chose que je ne reçois pas lorsque je développe une application en utilisant docker conteneurs.

Disons que je développe une application Java et j’ai configuré un conteneur Java avec l’image de base jdk 8, il me faut toujours installer Java 8 jdk sur ma machine de développement locale, car le IDE que je vais utiliser va rechercher des bibliothèques d’exécution sur la machine locale et non le conteneur de menu fixe.

Est-ce vrai ou est-ce que je manque quelque chose? Je pourrai faire quelque chose entièrement sur le conteneur de docker, comme par exemple configurer une base de données, mais je devrai également faire certaines choses sur ma machine de développement locale et essayer de faire correspondre cette image à mon image de docker, par exemple une exécution de langage telle que Java ou python afin d’utiliser l’EDI).

36
Hopewell Mutanda

Mises à jour:


Message original:

Il y a quelque chose que je ne reçois pas lors du développement d'une application lors de l'utilisation de conteneurs Docker.

Ce n'est pas grave. Essayez de voir la grande image, il s'agit de créer un pipeline de développement (ou pipeline CI/CD si vous souhaitez utiliser les termes Intégration continue/Livraison continue).

enter image description here

L'image ci-dessus provient de [2]

Limitations lors de la configuration d'un environnement de développement local

Disons que je développe une application Java et que j'ai configuré un conteneur Java avec l'image de base jdk 8, il me faut toujours installer Java 8 jdk sur ma machine de développement locale. , car le IDE que je vais utiliser va rechercher des bibliothèques d’exécution sur la machine locale et non le conteneur de menu fixe.

C'est une option qui peut vous causer un problème déjà mentionné: cela peut fonctionner sur votre environnement de développement local et échouer ailleurs car vous avez oublié d'ajouter une bibliothèque, une dépendance, une modification mineure que vous avez effectuée sans y prêter attention et en gardant à l'esprit de l'ajouter. à votre environnement de menu fixe.

Vous pouvez coller au docker tout en développant

Une approche qui résout le problème ci-dessus consiste à compter 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 le mode de création de vos images, vous devrez utiliser Dockerfiles. Et si votre application a différents conteneurs interconnectés, vous devrez définir tous ces éléments (réseaux, liens, dépendances) dans un fichier docker-compose.yml. Le processus répétitif de construction et d’exécution sera alors le travail de votre IDE ...

IDE et plugins/add-ons

à partir de [1]:

IDE

Les versions de Docker ne fournissent pas un IDE natif pour le développement avec Docker . L'interface principale est l'API en ligne de commande. Cependant, la plupart des principaux IDE (NetBeans, Eclipse, IntelliJ, Visual Studio) prennent en charge Docker via des plug-ins ou des add-ons.

Par exemple, à partir de [2]:

enter image description here

Docker Labs - Didacticiels sur les outils de développement

Vous pouvez trouver des indications en fonction de votre cas (IDE, langue ...) ici:

Volumes partagés | Rechargement à chaud | "surveiller" les modifications de fichier

Je pense que cette approche correspond à votre titre en disant "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'EDI), cela affecte directement le conteneur. Cela fonctionnera peut-être pour un cas et aura des limites pour d'autres cas. C'est à vous de faire votre bilan et de choisir votre voie.

Mes sources sont:

15
tgogos

Vous avez également la possibilité d’exécuter le IDE en tant que conteneur de menu fixe, de sorte que vous n’avez pas besoin d’installer quoi que ce soit sur votre ordinateur.

Pour ce faire, vous avez besoin de:
- docker
- X11
- an IDE de votre choix.

Jetez un oeil à ce projet Java) qui exécute Java8 et se positionne dans une IDE IntelliJ:

https://github.com/marioluan/Java-data-structures

La configuration est assez simple:

Dockerfile

FROM openjdk:8-jdk-Alpine

# ttf-dejavu is required to render GUI under X11: https://github.com/docker-library/openjdk/issues/73
RUN apk --update add --no-cache ttf-dejavu

# install intellij
RUN wget -O /tmp/idea.tar.gz https://download-cf.jetbrains.com/idea/ideaIC-2017.3.4.tar.gz \
    && mkdir -p /usr/share/intellij \
    && tar -xf /tmp/idea.tar.gz --strip-components=1 -C /usr/share/intellij \
    && rm /tmp/idea.tar.gz

docker-compose.yml

version: '3'
services:
  intellij:
    build: .
    environment:
      - DISPLAY=$DISPLAY
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - /your/workspace:/tmp/your/workspace
      - idea_cache:/root/.IdeaIC2017.3
      - Java_cache:/root/.Java
    working_dir: $APP_ROOT
    command: /usr/share/intellij/bin/idea.sh
volumes:
  idea_cache:
  Java_cache:
14
Mario Souza

Je peux ressentir ta douleur. Le développement de projets comportant plusieurs dépendances de bibliothèque peut rendre le processus de construction beaucoup plus fastidieux, chaque fois qu'une modification est apportée. Cela peut devenir frustrant.

Heureusement, vous pouvez résoudre ce problème en écrivant votre DockerFile en utilisant maven-docker-pluginhttps://github.com/spotify/docker-maven-plugin .

Cela économisera déjà les dépendances de bibliothèque disponibles sur votre hôte.

Par exemple, une demande d'extraction est ouverte dans un référentiel open source ici: https://github.com/iotaledger/iri/pull/481/files

1
Ahab