Skip to Content
Low-CodeDeploymentEigenes Docker Image erstellen

Eigenes Docker Image erstellen

Für Produktionsumgebungen empfiehlt es sich, ein eigenes Docker Image zu erstellen. Damit sind alle benötigten Third-Party Nodes, Konfigurationen und statischen Dateien im Image enthalten und reproduzierbar.

Basis-Image

Das offizielle LowCode Image dient als Basis:

marketplace.processcube.io/processcube-io/processcube_lowcode:latest

Dieses Image basiert auf nodered/node-red:4.1.1-22 (Node.js 22) und enthält:

  • Alle ProcessCube®-spezifischen Nodes und Extensions
  • System-Pakete: ffmpeg, ghostscript
  • ProcessCube®-Theme und Konfiguration
  • Storage Extension für Flow-Management

Einfaches Dockerfile

Das einfachste Dockerfile installiert zusätzliche npm-Pakete:

Dockerfile
FROM marketplace.processcube.io/processcube-io/processcube_lowcode:latest # Als Root-User für Paketinstallation USER root # Zusätzliche Nodes installieren WORKDIR /data RUN npm install \ node-red-contrib-influxdb@0.7.0 \ node-red-contrib-cron-plus@2.1.0 \ node-red-node-email@2.1.0 # Zurück zum Node-RED-User USER node-red WORKDIR /usr/src/node-red

Dockerfile mit package.json

Für bessere Wartbarkeit und Versionskontrolle verwenden Sie eine separate package.json:

custom-nodes/package.json
{ "name": "my-lowcode-project", "version": "1.0.0", "description": "Custom LowCode Image fuer Projekt XY", "dependencies": { "node-red-contrib-influxdb": "0.7.0", "node-red-contrib-cron-plus": "2.1.0", "node-red-node-email": "2.1.0", "node-red-contrib-telegrambot": "16.0.0" } }
Dockerfile
FROM marketplace.processcube.io/processcube-io/processcube_lowcode:latest USER root # package.json kopieren COPY custom-nodes/package.json /data/package.json # Abhängigkeiten installieren WORKDIR /data RUN npm install --production --no-optional # Zurück zum Standard-User USER node-red WORKDIR /usr/src/node-red

Erweitertes Dockerfile

Dieses Beispiel zeigt ein erweitertes Dockerfile mit statischen Dateien, eigenen Flows und System-Paketen:

Dockerfile
FROM marketplace.processcube.io/processcube-io/processcube_lowcode:latest USER root # Zusätzliche System-Pakete installieren (Alpine Linux) RUN apk add --no-cache \ imagemagick \ curl # Custom Nodes installieren COPY custom-nodes/package.json /data/package.json WORKDIR /data RUN npm install --production --no-optional # Statische Dateien kopieren (Logos, PDFs, etc.) COPY static/ /static/ # Eigene Flows als Standardkonfiguration COPY flows/ /data/flowStorageDir/ # Berechtigungen setzen RUN chown -R node-red:node-red /data /static USER node-red WORKDIR /usr/src/node-red

Projektstruktur

Eine empfohlene Projektstruktur für ein Custom Docker Image:

mein-lowcode-projekt/ ├── Dockerfile ├── docker-compose.yml ├── custom-nodes/ │ └── package.json ├── static/ │ ├── logo.png │ └── styles.css ├── flows/ │ └── flows/ │ └── main-flow/ │ └── flow.json └── .dockerignore

Die .dockerignore verhindert, dass unnötige Dateien ins Image gelangen:

.dockerignore
node_modules .git .env *.md

Build, Tag und Push

Lokaler Build

# Image bauen docker build -t mein-lowcode:1.0.0 . # Image lokal testen docker run -p 1880:1880 \ -e NODERED_AUTH_DISABLED=true \ mein-lowcode:1.0.0

Image taggen und pushen

# Für private Registry docker tag mein-lowcode:1.0.0 registry.example.com/mein-lowcode:1.0.0 docker push registry.example.com/mein-lowcode:1.0.0 # Mit "latest" Tag docker tag mein-lowcode:1.0.0 registry.example.com/mein-lowcode:latest docker push registry.example.com/mein-lowcode:latest

CI/CD-Integration

Beispiel für eine GitHub Actions Pipeline:

.github/workflows/build.yml
name: Build LowCode Image on: push: branches: [main] tags: ['v*'] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Login to Registry run: docker login registry.example.com -u ${{ secrets.REGISTRY_USER }} -p ${{ secrets.REGISTRY_PASS }} - name: Build and Push run: | docker build -t registry.example.com/mein-lowcode:${{ github.sha }} . docker push registry.example.com/mein-lowcode:${{ github.sha }}

Verwendung in docker-compose.yml

docker-compose.yml
services: lowcode: build: context: . dockerfile: Dockerfile ports: - "1880:1880" environment: - ENGINE_URL=http://engine:8000 - NODERED_AUTHORITY_URL=http://authority:11560 - NODERED_CREDENTIAL_SECRET=${CREDENTIAL_SECRET} volumes: - lowcode_data:/data restart: unless-stopped volumes: lowcode_data:

Aufbau des offiziellen Image

Das offizielle LowCode Image verwendet einen Multi-Stage-Build:

  1. Builder-Stage (Node.js 22): Kompiliert alle Pakete mit pnpm, baut TypeScript-Quellen und erstellt das Deployment-Bundle
  2. Runtime-Stage (nodered/node-red:4.1.1-22): Kopiert die gebauten Artefakte, installiert System-Pakete (ffmpeg, ghostscript) und konfiguriert den Entrypoint

Der Entrypoint startet Node-RED mit dem ProcessCube®-Settings-Loader:

ENTRYPOINT ["./entrypoint.sh", "--settings", "/etc/processcube/nodered/settings_loader.js"]

Tipps

  • Pinnen Sie Versionen: Verwenden Sie immer feste Versionen für Basis-Image und npm-Pakete
  • Kleine Images: Installieren Sie nur benötigte Pakete und verwenden Sie --production --no-optional
  • Sicherheit: Lassen Sie den Container als node-red-User laufen (nicht als root)
  • Layer-Caching: Kopieren Sie die package.json vor dem restlichen Code, um Docker-Layer-Caching zu nutzen

Nächste Schritte