2016-06-22 32 views
1

Ich arbeite an "Andocken" eine Java-Webanwendung (https://github.com/kermitt2/grobid), die ich mit Anlegesteg ausführen möchte.Docker Bild mit Steg zu bauen - wann sollte ich bauen?

Hier die Dockerfile:

FROM jetty:9.3-jre8 
ADD ./grobid-home/target/grobid-home-0.4.1-SNAPSHOT.zip /opt 

RUN unzip /opt/grobid-home-0.4.1-SNAPSHOT.zip -d /opt && \ 
    rm /opt/grobid-home-0.4.1-SNAPSHOT.zip && \ 
    apt-get update && apt-get -y --no-install-recommends install libxml2 

COPY ./grobid-service/target/grobid-service-0.4.1-SNAPSHOT.war \ 
    /var/lib/jetty/webapps/ROOT.war 

Die aktuelle Docker Bild funktioniert perfekt, aber es erfordert die Anwendung vor gebaut werden (es ist nicht aus dem frischen git clone gebaut werden kann). Zum Beispiel konnte ich keinen Build mit dem Docker-HUB-Build-System ausführen.

Was wäre der bevorzugte Ansatz? Erstellen Sie das Maven-Projekt, während Sie das Image erstellen oder das Andockfenster ausführen, nachdem der Build erfolgreich abgeschlossen wurde.

Antwort

1

Ich nehme an, das Docker-Image, das Sie erstellen, ist für die Produktion.

Wenn Sie ein Bild erstellen, welche die Quellen und bauen den Krieg dauert, werden Sie einzubetten haben:

  • JDK
  • Maven
  • Ihre Quellen

Jeder von diesen sind völlig nutzlos und nehmen in deinem Bild viel Platz für absolut nichts ein.

Also ja, IMO fügen Sie nur den Krieg zu Ihrem Docker-Bild, Sie bauen nicht von innen.

Ich denke, dass Sie nicht Ihr Docker Bild in Ihrem Maven Prozess aufbauen sollten, dann ist es zwei getrennte Prozesse, die Sie mit etwas höheren Niveau Scripting (oder jenkins Pipeline)

+0

der Tat gute Punkte zu automatisieren. Vielen Dank. Jetzt habe ich eine zweite Frage, wie sollte diese Pipeline integriert werden? Nehmen wir an, wir haben einen Travis-Build, der sich um das Erstellen von Snapshot-Images kümmert. Wie kann ich einen zweiten Build, vielleicht manuell, implementieren, wenn er ausgelöst wird und das Docker-Image erstellt? Der Docker-Hub ist nicht geeignet, da die Daten vorher erstellt werden müssen. Irgendein Vorschlag? Travis vielleicht? Ich bin mir nicht sicher ... –

+0

Sie könnten den Docker-Hub verwenden, Sie müssen nur Ihre Artefakte in einem Maven-Repository veröffentlichen, zum Beispiel Sonatyp: http://central.sonatype.org/pages/ossrh-guide. html So müssen Sie in Ihrer Dockerdatei nur 'ADD http: // theurlofyourjaronsonatype' eingeben und travis veranlassen, dass jedes Mal, wenn Sie Ihr jar/war, ein Andockfenster erstellt wird –