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.
Gibt es einen Grund, warum Sie es nicht wie gewöhnlich lokal entwickeln und es dann docken? – Craicerjack
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
@BMitch Zum Glück funktioniert es, und ich kann leicht sehen, Änderungen, was ich im Container gemacht habe, auf meinem Host – user1016265