2016-08-10 2 views
0

Was ist der richtige Weg, um App lokal im Container zu entwickeln, wenn es möglich ist, node_modules auf meinem Laptop file system zu haben.Docker für lokale NodeJS Entwicklung

Derzeit habe ich folgende settings im Dockerfile

COPY package.json /app/ 
RUN npm install 
COPY . /app/ 

und die folgenden docker-compose

volumes: 
    - "/app/node_modules" 

In diesem Fall ich bin in der Lage npm Befehle in dem Behälter und Änderungen in der package.json laufen sind in meinem lokalen Quellenbaum widergespiegelt. Was gut ist. Aber eine Sache fehlt: Ich habe lokal node_modules Ordner und es bedeutet, dass meine IDE diese Dateien nicht sehen kann.

Ist es möglich, irgendwie zu beheben?

+0

Gibt es einen Grund, warum Sie es nicht wie gewöhnlich lokal entwickeln und es dann docken? – Craicerjack

+0

Mit dieser Konfiguration werden Änderungen an package.json im Container nicht auf dem Host angezeigt. Das Volume ist ein Container-Volume, das einen 'docker rm -v' nicht überlebt. Vielleicht wollten Sie ein Host-Volume verwenden? – BMitch

+0

@BMitch Zum Glück funktioniert es, und ich kann leicht sehen, Änderungen, was ich im Container gemacht habe, auf meinem Host – user1016265

Antwort

1

Sie können alle Ihre lokale Umgebung in die Behälter kopieren:

COPY ./package.json /app/package.json 
WORKDIR /app/ 
RUN npm install 
COPY ./src/ /app/src/ 
CMD ["npm","run","start"] 

Dieser Ansatz wird Ihre lokale Umgebung auf das Bild buchstäblich kopieren. Jedes Mal, wenn Sie Ihre Quellen ändern würden, müssten Sie das Image neu erstellen und den Container neu starten.

Ich empfehle, dass Sie Ihren Projektordner als ein Volume in den Container mounten - mit allen Abhängigkeiten, und jede Änderung in den Quellen/Abhängigkeiten würde nur den Container neu starten (oder Sie können einen Supervisor im Container verwenden):

VOLUME /app/ 
WORKDIR /app/ 
CMD ["npm","run","start"] 

Wenn der Behälter läuft - erinnern Sie Ihr Projektverzeichnis mit dem Behälter verbinden:

Und die docker-compose.yml Datei

version: '2' 

services: 
    app: 
    build: . 
    image: app 
    volumes: [".:/app/"] 

(ich davon aus, dass die Dockerfile für Ihre Node.js App im selben Verzeichnis wie Quellen, node_modules und docker-compose.yml)


EDIT: Die Lösung oben gepostet für die lokale Entwicklung gut ist. Wenn Sie dockerize und bereitstellen möchten Ihre Anwendung gibt es zwei Ansätze:

Kopieren Ihrer lokalen node_modules und alle Quellen in den Behälter:

COPY ./node_modules /app/ 
COPY ./src /app/ 
COPY ./package.json /app/ 
WORKDIR /app/ 
CMD ["npm","run","start"] 

Oder die Vorlage aus der Spitze meiner Antwort zu verwenden (es wird alle Knotenmodule während des Builds installieren - wenn package.json ändert) ist dieser Build viel langsamer.

+0

es funktioniert nicht, 'node_modules' Ordner wegen der lokalen Ordner darüber versteckt. Wenn Sie ein Github Repo mit Sample Express oder irgendetwas anderes App machen können, wäre es großartig. Vielen Dank. – user1016265

+0

@ user1016265 hier gehen Sie: https://github.com/jan-osch/expressing_docker :) –

+0

Könnten Sie bitte erwähnen, wie Sie es ausführen? Da in der Docker-Datei keine 'npm-Installation 'vorhanden ist, bedeutet dies, dass Sie nach dem Hochfahren des Containers irgendwie installiert haben (wie?)? – user1016265

Verwandte Themen