NodeJS Getting-Started¶
Dieses Beispiel ist sowohl auf dem Docker Hub, der Docker Dokumentation als auch im Docker Desktop die aktuelle Anlaufstelle für Umsetzungen von Programmierumgebungen mit Docker.
Lokale Getting-Started Website basierend auf Image docker/getting-started¶
Erste Anlaufstelle ist eine Webumgebung, welche die Dokumentation für die Darstellungen enthält.
Die eigentliche NodeJS / JavaScript App ist in der Anleitungs-Website, die man jetzt erhalten hat gleich als downloadbares app.zip integriert.
Die Erstellung des app.zip inklusive der Übertragung in das Image für Getting-Started kann man sehr schön dem Dockerfile mit Multi-Stage-Build entnehmen.
Bitte vor Allem die GitHub Repos sauber auseinanderhalten - die Quelle für die NodeJS-App auf GitHub lautet:
GitHub Repo docker/getting-started-app - man beachte das
-appam Reponamen.
Das irritiert häufig auch die Trainees, weil in der Website, die wir erhalten haben ein Image mit dem Namen getting-started erstellt wird.
Der Name sollte allerdings besser heißen: training/getting-started-app! Bei diesem Namen macht das Image keinen offiziellen Eindruck und durch das angehängte -app hat man die saubere Abtrennung zur Website (s.o.) für den Einstieg in die Thematik.
Hinweis
Natürlich kann man auch nur die getting-started-app klonen und direkt entwickeln.
In diesem Beispiel wird die Live-Aktualisierung des JavaScript Codes
für den NodeJS Service ein Kommando für eine Arbeitsumgebung mit dem
Standard Image node:18-alpine und Aufruf des Tools yarn install &&
yarn run dev.
Auf den aktuelleren Websites zur Getting Started App - Bind Mounts sind die Mounts mit ausführlicher Syntax verdrahtet und erläutert.
docker run -dp 127.0.0.1:3000:3000 \
-w /app --mount type=bind,src="$(pwd)",target=/app \
node:18-alpine \
sh -c "yarn install && yarn run dev"
Die kürzere Version verzichtet auf die wörtliche Zuweisung mittels des types über die Signalworte src nd target und die Limitierung auf die Localhost-IP.
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:18-alpine \
sh -c "yarn install && yarn run dev"
Die package.json definiert den Job / das Skript dev mit
nodemon src/index.js - und dieser Node-Monitor aktualisiert die Ausgabe
bei Webrequests.
Und auch hier wollen wir natürlich nicht dauernd alle möglichen Befehle für die benötigten Containertechniken eingeben sondern komponieren (Docker Compose) bzw. Docker Stack nutzen.
Aktuelle Erklärungen online: Docs Docker - Getting Started App - using Compose
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:8.0
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
Die Festlegung der app: ports: auf - 127.0.0.1:3000:3000 inklusive
der IP für Localhost scheinen hier technisch notwendig zu sein. Das liegt
wohl an der NodeJS/Alpine Service-Technik.