wake-up-neo.com

Verwenden einer IDE während der Entwicklung eines Docker-Containers

Es gibt etwas, das ich nicht bekomme, wenn ich eine Anwendung entwickle, während ich docker Container verwende.

Nehmen wir an, ich entwickle eine Java) - Anwendung und richte einen Java - Container mit dem Basisimage von jdk 8 ein. Ich muss noch Java 8 jdk auf meiner lokalen Entwicklungsmaschine, da die IDE die ich verwenden werde, auf der lokalen Maschine nach Laufzeitbibliotheken sucht, nicht nach dem Docker-Container.

Ist das richtig oder fehlt mir etwas? In einigen Fällen kann ich den Docker-Container vollständig bearbeiten, beispielsweise beim Einrichten einer Datenbank. In einigen Fällen muss ich jedoch auch auf meinem lokalen Entwicklungscomputer versuchen, ihn mit meinem Docker-Image abzugleichen, z. B. mit einer Sprachlaufzeit wie Java oder python zur Verwendung der IDE.

36

Aktualisierung:


Ursprünglicher Beitrag:

Es gibt etwas, das ich beim Entwickeln einer Anwendung mit Docker-Containern nicht bekomme.

Es ist in Ordnung, das ist nichts Triviales. Versuchen Sie, den Überblick zu behalten. Es geht darum, eine Entwicklungspipeline (oder CI/CD-Pipeline zu erstellen, wenn Sie die Begriffe Continuous Integration verwenden möchten/Kontinuierliche Lieferung).

enter image description here

Das obige Bild ist von [2]

Einschränkungen beim Einrichten einer lokalen Entwicklungsumgebung

Nehmen wir an, ich entwickle eine Java -Anwendung und richte einen Java -Container mit dem jdk 8-Basisimage ein. Ich muss noch Java 8 installieren jdk auf meinem lokalen Entwicklungscomputer, da das IDE, das ich verwenden werde, nach Laufzeitbibliotheken auf dem lokalen Computer sucht, nicht nach dem Docker-Container.

Dies ist eine Option, die möglicherweise zu einem bereits erwähnten Problem führt: Sie funktioniert möglicherweise in Ihrer lokalen Entwicklungsumgebung und schlägt an anderer Stelle fehl, weil Sie vergessen haben, eine Bibliothek, eine Abhängigkeit oder eine geringfügige Änderung hinzuzufügen, die Sie ohne Beachtung und unter Berücksichtigung des Hinzufügens vorgenommen haben zu Ihrer Docker-Umgebung.

Sie können sich während der Entwicklung an Docker halten

Ein Ansatz, der das obige Problem löst, besteht darin, sich auf Docker zu verlassen[3], um die Umgebung einzurichten, die Sie verwenden möchten. Dies bedeutet, dass Sie jedes Mal, wenn Sie etwas ändern, docker build Ein neues Bild und docker run Einen neuen Container basierend auf diesem Bild erstellen müssen. Wie bereits erwähnt, müssen Sie Dockerfiles verwenden, um zu definieren, wie Ihre Bilder erstellt werden sollen. Und wenn Ihre App verschiedene miteinander verbundene Container hat, müssen Sie all diese (Netzwerke, Links, Abhängigkeiten) in einer docker-compose.yml - Datei definieren. Der sich wiederholende Prozess des Erstellens und Ausführens ist dann die Aufgabe Ihrer IDE ...

IDEs & Plugins/Add-Ons

von [1]:

IDE

Docker-Versionen bieten kein natives IDE für die Entwicklung mit Docker . Die primäre Schnittstelle ist die Befehlszeilen-API. Die meisten führenden IDEs (NetBeans, Eclipse, IntelliJ, Visual Studio) unterstützen Docker jedoch über Plugins oder Add-Ons.

Zum Beispiel von [2]:

enter image description here

Docker Labs - Tutorials für Entwicklertools

Abhängig von Ihrem Fall (IDE, Sprache ...) finden Sie hier einige Richtlinien:

Freigegebene Volumes | Heißes Nachladen | Dateiänderungen "beobachten"

Ich denke, dieser Ansatz passt zu Ihrem Titel: "Entwickeln auf einem Docker-Container" und ich meine/verstehe den Fall, dass jemand einen Container mit einem gemeinsam genutzten Volume ausführt und wann immer eine Änderung im Code auftritt (unter Verwendung der IDE) wirkt sich dies direkt auf den Container aus. Möglicherweise funktioniert dies für einen Fall und hat in einigen anderen Fällen Einschränkungen. Es liegt an Ihnen, Ihre Einschätzungen vorzunehmen und Ihren Weg zu wählen.

Meine Quellen sind:

15
tgogos

Sie haben die Möglichkeit, IDE als Docker-Container auszuführen, damit Sie nichts auf Ihrem Computer installieren müssen.

Dazu benötigen Sie:
- Hafenarbeiter
- X11
- ein IDE Ihrer Wahl.

Schauen Sie sich dieses Java Projekt an, das Java8 ausführt und in einer IntelliJ IDE abläuft:

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

Das Setup ist ziemlich einfach:

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

Ich kann deinen Schmerz fühlen. Durch das Entwickeln von Projekten mit mehreren Bibliotheksabhängigkeiten kann der Erstellungsprozess bei jeder Änderung viel zeitaufwendiger werden. Dies kann frustrierend werden.

Glücklicherweise können Sie dieses Problem beheben, indem Sie Ihr DockerFile mit maven-docker-pluginhttps://github.com/spotify/docker-maven-plugin schreiben.

Dies erspart Ihnen die Nutzung der Bibliotheksabhängigkeiten, die auf Ihrem Host verfügbar sind.

Als Beispiel habe ich eine Pull-Anfrage in einem Open-Source-Repository hier geöffnet: https://github.com/iotaledger/iri/pull/481/files

1
Ahab