2017-03-04 2 views
0

Ich Einrichtung Docker für meine Reaktion/Redux app, und ich frage mich, wie es in einer solchen Art und Weise einzurichten, dass in der Produktion, bei der Containeraufbau, webpack mit Produktionskonfiguration meine ganze Code kompiliert und dann entfernt es sich selbst oder so etwas. Weil das einzige, was ich für mein Projekt brauche, ist Produktionscode und ein einfacher Knotenserver, der es bedienen wird.Compile webpack auf Docker Produktionsserver

Ich bin mir nicht sicher, ob ich es gut erklärt habe, da Docker und Webpack immer noch neue Dinge für mich sind.

EDIT: Alternativ kann ich sogar alles mit einem Apache-Server bedienen, aber ich möchte alles kompilieren und einrichten, nur wenn ich Docker-Compose ausführen.

Antwort

2

Wenn ich richtig verstanden habe, möchten Sie Ihre Knoten Dev Abhängigkeiten von Ihrem Bild nach Ihrem npm run Build während der Docker Build zu zerstören.

Sie können es tun, aber es gibt einen kleinen Trick, den Sie beachten müssen. Jede Zeile in Ihrer Dockerfile führt zu einem neuen Schritt im Bild und wird mit dem Bild verschoben.

RUN npm install  # Install dev and prod deps 
RUN npm run build # Execute your webpack build 
RUN npm prune --production # Trash all devDependencies from your node_modules folder 

Ihre Bildgröße Willen enthält:

  • Die erste npm
  • Der Lauf
  • Das Ergebnis der Prune npm bauen npm installieren
  • Also, wenn Sie in Ihrem Dockerfile ausführen

Ihr Bild wird größer als nur:

RUN npm install  # Install dev and prod deps 
RUN npm run build # Execute your webpack build 

Wich enthält:

  • Die erste NPM installieren
  • Der npm Lauf

Um dieses Problem zu vermeiden, bauen Sie in Ihrem dockerfile tun müssen:

RUN npm install && npm run build && npm prune --production 

Auf diese Weise erhalten Sie ein minimalistisches Bild. Mit:

  • Die npm Lauf bauen
  • Das Ergebnis der npm Prune

Ihre letzte Dockerfile wird eine Art sein:

FROM node:7.4.0 

ADD . /src 
RUN cd /src && npm install && npm run build && npm prune --production # You can even use npm prune without the --production flag 

ENV NODE_ENV production 
+0

Awesome, das ist genau das, was ich brauchte. Hast du auch eine Idee und wie könnte ich erstellte Dateien später mit Apache bedienen? Um eine Art Middleware-Container zu erstellen, die nur den Code baut? Nur alle Möglichkeiten zu erkunden :) –

+0

Ich denke, dass der beste Weg, um dies durchzuführen, ist die Verwendung von Volumen in Docker. Sie führen einen Knoten Behälterbau webpack und führen Sie den Knoten Server mit Option -v die Ordner zu, wo Sie die öffentlichen Vermögen aufzubauen. Dann einen anderen Andock-Container mit --volume - from flag, um den Ordner im Apache-Container zugänglich zu machen. Sie müssen nur sicher sein, dass Ihr Apache conf die Assets aus dem gemounteten Ordner holt. –

+0

Beispiel: 'docker run -v/src/public -name mein-knoten ' und: 'docker run -volumes-from = mein-knoten ' –

Verwandte Themen