Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Industrietechnik

Deployments mit Multi-Stage-Container-Builds optimieren

Systeme werden schnell sehr groß, wenn sie vollständig ausgeliefert werden – einschließlich Build- und Testumgebung. Selbst wenn das Extrahieren der auszuliefernden Dateien kein Problem darstellt, ist es zeitaufwendig.

Container bieten die Möglichkeit, dies zu automatisieren.

Dabei können mehrere Container in einer Datei definiert werden. Eine mit JavaScript erstellte und mit Node.js gebaute Website ist ein gutes Beispiel.

Beispiel:

Das gesamte System als Container ergibt insgesamt über 600 MByte, obwohl nur 22 MByte (Webserver + Website) benötigt werden. Hinzu kommt ein Sicherheitsrisiko, da Software vorhanden ist, die für den produktiven Betrieb nicht benötigt wird. Die Lösung: Multi-Stage-Builds.

Was ist ein Multi-Stage-Build?

Bei einem Multi-Stage-Build werden mehrere Container in einer Datei definiert und nur die notwendigen Daten von einem Container in den anderen übertragen.

Beispiel: Multi-Stage-Dockerfile

Am Beispiel von Node.js: Der erste Container enthält Node.js als Build-System, in dem die Website erstellt wird. Der zweite Container enthält den Webserver, der nach dem Build die notwendigen Daten aus dem ersten Container kopiert.

## Base System Stage 1
## Community Node.js Container verwenden
FROM node:8.11.3 as buildsystem

## Quellcode aus Git-Projekt hinzufügen
COPY ./source /root/frontend

## Frontend mit Node.js bauen
WORKDIR /root/frontend/
RUN npm install \
&& npm run build

#####################################################################
#####################################################################

## Base System Stage 2
## Community nginx Container verwenden
FROM nginx:alpine

## Build aus Stage 1 kopieren
RUN mkdir -p /var/www/html/<MyApp>
COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/

## Standard-Konfiguration für nginx hinzufügen
ADD default.conf /etc/nginx/conf.d/

## Port freigeben
EXPOSE 80

## nginx starten
CMD ["nginx", "-g", "daemon off;"]

Das Ergebnis ist ein kleiner Container, der nur das Nötigste enthält. Wir nutzen eine sehr kleine Linux-Distribution für nginx mit Alpine.

Ein weiterer Vorteil: Man greift auf zwei fertige Community-Container zu und muss diese nicht selbst erstellen und warten. Für Systemupdates werden die Community-Container einfach regelmäßig ersetzt. Der gesamte Prozess lässt sich hervorragend in einer Pipeline mit GitLab (oder anderen Tools) automatisieren.

Industrietechnik

  1. Vertrauen mit Business Leadern aufbauen: Die richtigen Cloud Services wählen
  2. Multiplikation und Division mit wissenschaftlicher Notation meistern
  3. Industrie 4.0 Insights: Q&A mit Verena Majuntke von Bosch.IO zu IoT, Automatisierung und der Fabrik der Zukunft
  4. Erstes IoT-Projekt mit Raspberry Pi, DHT11 und ThingSpeak bauen
  5. Microsoft stellt rekordverdächtiges 17-Milliarden-Parameter-Sprachmodell vor
  6. KI-gesteuerte Roadmaps: Strategischer Leitfaden für Supply-Chain-Unternehmen
  7. Intelligente Beschaffung: KI mit menschlicher Expertise verbinden
  8. Effiziente Containerkräne: Präzises Be- und Entladen für Häfen und Rangierbahnhöfe
  9. Effiziente ARM-Container-Builds auf x86-Systemen
  10. Deployments mit Multi-Stage-Container-Builds optimieren