Wenn Build, Test und Release nicht mehr nachvollziehbar zusammenpassen

In gewachsenen Embedded-Projekten entstehen Abhängigkeiten oft schleichend. Build-Umgebungen unterscheiden sich, Bibliotheken werden manuell gepflegt und Releases hängen an einzelnen Rechnern oder Erfahrungswissen. Mit zunehmender Produktlaufzeit wird daraus ein technisches und organisatorisches Risiko.

Nicht reproduzierbare Build-UmgebungenNicht reproduzierbare Build-Umgebungen
Eine Anwendung funktioniert auf dem Entwicklungsrechner, lässt sich aber auf einem anderen System oder im späteren Build-Prozess nicht zuverlässig nachvollziehen. Abweichende Toolchains, Bibliotheksstände und lokale Konfigurationen führen zu unterschiedlichen Ergebnissen.
Unklare AbhängigkeitenUnklare Abhängigkeiten
Anwendungen, Systembibliotheken, Konfigurationsdateien und Dienste wachsen über Jahre zusammen. Eine Änderung an einer Komponente kann unerwartete Auswirkungen auf andere Teile des Systems haben – insbesondere dann, wenn Zuständigkeiten und Versionsstände nicht sauber getrennt sind.
Manuelle Releases & UpdatesManuelle Releases und Updates
Wenn Build, Test, Freigabe und Auslieferung nicht durchgängig definiert sind, entstehen vermeidbare Risiken. Es bleibt unklar, welcher Softwarestand auf welchem Gerät läuft, welche Änderungen enthalten sind und wie sich bei Fehlern auf einen funktionierenden Stand zurückkehren lässt.

Docker-Container sind nicht immer Linux-basiert

Containerisierung ist grundsätzlich nicht auf Linux beschränkt. Moderne Windows-Systeme können Windows-Container ausführen. Für Linux existieren mit Docker und vergleichbaren Container-Technologien allerdings besonders etablierte Mechanismen für die Paketierung und Isolation von Anwendungen.

Linux-basierte Embedded-Systeme

  • Typischer Einsatzbereich für Docker auf ARM-basierten Zielgeräten
  • Yocto ermöglicht eine gezielt zugeschnittene Linux-Systembasis
  • Geeignet für die Trennung von Linux-Anwendungen und ihren Laufzeitabhängigkeiten

Moderne Windows-Systeme

  • Windows-Container können für passende Windows-Anwendungen eine Option sein
  • Erfordert in der Regel einen kompatiblen modernen Windows-Host
  • Eignung hängt von Windows-Version, Anwendungsarchitektur und Betriebsumgebung ab

Für die Containerisierung klassischer Windows-Anwendungen ist eine individuelle technische Bewertung erforderlich. Windows Embedded Compact beziehungsweise WinCE ist nicht mit modernen Windows-Container-Umgebungen gleichzusetzen und in der Regel keine Docker-Zielplattform.

Containerisierung ist keine vollständige Embedded-Systemarchitektur

Die nachfolgende technische Einordnung konzentriert sich auf Linux-basierte Embedded-Systeme. Hier bilden Kernel, Treiber und eine beispielsweise mit Yocto erstellte Systembasis die Grundlage, auf der Docker-Container betrieben werden können.

Containerisierung strukturiert die Anwendungsebene. Sie ersetzt weder Embedded Linux, Kernel und Treiber noch ein Update-, Persistenz- oder Recovery-Konzept.

Docker-basierte Container kapseln Anwendungen und ihre definierten User-Space-Abhängigkeiten. Das kann Entwicklung, Test und Auslieferung deutlich besser beherrschbar machen. Die hardwarenahe Systembasis bleibt jedoch weiterhin eine zentrale Aufgabe der Embedded-Entwicklung.

Was Containerisierung leisten kannWas Containerisierung leisten kann
- Anwendungen und ihre Laufzeitabhängigkeiten klarer abgrenzen
- einzelne Dienste getrennt versionieren und bereitstellen
- Build- und Testumgebungen reproduzierbarer gestalten
- definierte Images als nachvollziehbare Release-Artefakte erzeugen
- versionierte Anwendungsreleases kontrollierter organisieren
Was auf Systemebene entschieden werden mussWas auf Systemebene entschieden werden muss
- Bootloader, Linux-Kernel, Device Tree und Treiber
- Hardwarezugriffe auf Schnittstellen und Peripherie
- Systemdienste, Benutzerrechte und Netzwerkarchitektur
- Ressourcenmanagement, Startverhalten und Echtzeitanforderungen
- Systemupdates, Persistenz, Recovery und Rückfallstrategien

Der Unterschied zwischen Containerisierung und Virtualisierung

Container und virtuelle Maschinen verfolgen beide das Ziel, Anwendungen voneinander zu trennen. Die technische Umsetzung ist jedoch grundlegend verschieden.

KriteriumContainerVirtuelle Maschine
Betriebssystem Nutzt das Betriebssystem des Hosts Enthält ein eigenes Gastbetriebssystem
Linux-Kernel Wird mit dem Hostsystem geteilt Läuft innerhalb des jeweiligen Gastbetriebssystems
Ressourcenbedarf In der Regel geringer, abhängig von Anwendung und Image Höher durch zusätzliches Betriebssystem und Virtualisierung
Startverhalten Typisch schneller, abhängig von Anwendung und Initialisierung Meist längerer Systemstart
Isolation Trennung auf Betriebssystemebene Trennung über virtualisierte Hardware
Typischer Embedded-Einsatz Modularisierung von Linux-Anwendungen auf geeigneten Zielgeräten Spezielle Anforderungen an Plattformtrennung oder Ausführungsumgebungen

Container sind damit nicht automatisch die bessere Lösung. Für Embedded-Projekte lautet die relevante Frage:

Verbessert die Container-Grenze Wartbarkeit, Wiederholbarkeit und Updatefähigkeit so deutlich, dass sie den zusätzlichen Betriebsaufwand rechtfertigt?

Wann Docker-Containerisierung im Embedded-Umfeld sinnvoll ist

Containerisierung ist kein Standardbaustein für jedes Gerät. Sie sollte eingesetzt werden, wenn sie einen nachvollziehbaren technischen Nutzen liefert.

Docker-Containerisierung ist häufig sinnvoll, wenn …

  • mehrere Dienste oder Anwendungen getrennt versioniert werden sollen
  • Anwendungen klare Abhängigkeitsgrenzen besitzen
  • Build- und Testumgebungen reproduzierbar werden müssen
  • einzelne Komponenten unabhängig vom Basis-OS aktualisiert werden sollen
  • ein klarer Build-, Test- und Releaseprozess aufgebaut werden soll

Eine andere Architektur kann geeigneter sein, wenn …

  • Flash-, RAM- oder CPU-Reserven sehr begrenzt sind
  • eine schlanke native Anwendung dieselbe Aufgabe einfacher erfüllt
  • der Hardwarezugriff sehr eng und privilegiert mit der Anwendung verbunden ist
  • besonders deterministische Reaktionszeiten im Mittelpunkt stehen
  • eine Container Runtime den Gerätebetrieb unverhältnismäßig komplex macht

Die Entscheidung entsteht nicht anhand eines einzelnen Kriteriums. SIGMA bewertet Zielhardware, Zielsystem, Anwendungsarchitektur, Schnittstellen, Ressourcen und den geplanten Gerätebetrieb im Zusammenhang.

Die wichtigsten Bausteine einer Docker- und CI/CD-Architektur

Dockerfile

Ein Dockerfile beschreibt nachvollziehbar, wie ein Container-Image aufgebaut wird: Basis-Image, Abhängigkeiten, Build-Schritte und Startverhalten der Anwendung.

Container Image

Ein Container Image ist ein versioniertes Anwendungsartefakt. Es enthält die Anwendung und ihre definierten Laufzeitabhängigkeiten in einem reproduzierbaren Zustand.

Container

Ein Container ist die laufende Instanz eines Images. Ressourcen, Berechtigungen, Netzwerk- & Gerätezugriffe und Datenpfade werden für den Betrieb festgelegt.

Docker Hub

Docker Hub ist eine öffentliche Container Registry für Basis- und Anwendungs-Images. Für Produktivsysteme sollten Herkunft, Version und Eignung der verwendeten Images kontrolliert werden.

Git

Git versioniert Quellcode, Konfigurationen, Build-Beschreibungen und Pipeline-Dateien. Änderungen bleiben nachvollziehbar und zeigen einen definierten Entwicklungsstand.

CI/CD-Pipeline

Eine CI/CD-Pipeline automatisiert wiederkehrende Schritte wie Build, Test, Artefaktablage und Bereitstellung. Dadurch sinkt die Abhängigkeit von manuellen Abläufen.

So funktioniert Docker auf einem Embedded-System

 

Auf der Zielhardware stellt ein beispielsweise mit Yocto aufgebautes Embedded Linux Kernel, Treiber und Systemdienste bereit. Darüber führt die Docker Engine Anwendungen in getrennten Containern aus.

  • Container: enthalten Anwendung, Laufzeitbibliotheken und ein eigenes Dateisystem.
  • Gemeinsame Basis: Alle Container nutzen den Linux-Kernel des Hostsystems.
  • Klare Grenze: Bootloader, Kernel, Treiber und Hardwareintegration bleiben Teil der Systembasis.

Vom Quellcode zum nachvollziehbaren Release

Code und Dockerfile versionieren

Code und Dockerfile versionieren

Anwendung, Build-Beschreibung und Tests liegen nachvollziehbar im Git-Repository

GitLab Pipeline

GitLab-Pipeline ausführen

Ein GitLab Runner führt die definierten Build- und Testschritte der Pipeline aus

ARM Image erzeugen

ARM-Image erzeugen

Das Container Image wird passend zur Zielarchitektur des Embedded-Systems gebaut

Image in Registry ablegen

Image in Registry ablegen

Geprüfte Versionen werden versioniert in einer Container Registry bereitgestellt

Kontrolliert ausliefern

Kontrolliert ausliefern

Das Zielgerät erhält das freigegebene Image über den vorgesehenen Update- oder Deployment-Prozess

GitLab im Embedded-Workflow

GitLab kann Git-Repository, CI/CD-Pipelines und Container Registry in einer Plattform verbinden. GitHub kann ebenfalls für Versionsverwaltung und automatisierte Workflows eingesetzt werden. Welche Umgebung zu Ihrem Projekt passt, hängt von vorhandener Infrastruktur, Berechtigungsmodell und Build-Prozess ab.

Yocto stellt die Systembasis bereit – Docker strukturiert die Anwendung

Ein Yocto-basiertes Embedded Linux kann gezielt auf Zielhardware und Produktanforderungen zugeschnitten werden. Bootloader, Kernel, Treiber, Systemdienste und der benötigte Softwareumfang werden auf Systemebene definiert.

Docker setzt oberhalb dieser Basis an. Container strukturieren Anwendungen und deren Abhängigkeiten, ohne die hardwarenahe Verantwortung vom Embedded-System zu entkoppeln.

Yocto-basierte Systembasis

  • Bootloader, Kernel und Treiber
  • Board-spezifische Konfiguration
  • Hardwarezugriffe und Schnittstellen
  • Benutzerrechte, Netzwerk und Systemdienste
  • Grundlage für Update, Recovery und Betriebssicherheit

Containerisierte Anwendungsebene

  • getrennte Anwendungskomponenten
  • definierte Bibliotheken und Laufzeitabhängigkeiten
  • reproduzierbare Build-Umgebungen
  • versionierte Container-Images
  • getrennt planbare Anwendungsreleases

Ein Container kann nur dann stabil betrieben werden, wenn die darunterliegende Linux-Systembasis zur Hardware, zur Anwendung und zum geplanten Lebenszyklus des Geräts passt. Diese Architektur beschreibt den Linux-basierten Schwerpunkt. Für moderne Windows-Container gelten andere Voraussetzungen hinsichtlich Hostsystem, Kompatibilität und Betriebsmodell.

Was bei Containerisierung auf Embedded-Geräten zusätzlich zählt

Docker-Container nutzen auf Linux-Systemen den Kernel des Hostsystems. Die Anwendung und ihre nativen Bibliotheken im Container müssen dennoch zur CPU-Architektur des Zielgeräts passen.

Ein Container Image, das für einen Intel- oder AMD-Rechner mit x86_64 erstellt wurde, läuft auf einem ARM-basierten Embedded-System – etwa mit einem i.MX System on Chip – nicht nativ. Dass beide Systeme Linux verwenden, reicht dafür nicht aus.

Das Image muss daher passend zur Zielarchitektur erzeugt werden. Je nach Projekt kommen dafür native ARM-Builds, Cross-Compilation oder Multi-Platform-Builds mit geeigneten Build-Umgebungen in Betracht. GitLab CI/CD kann diese architekturgerechte Build- und Testkette automatisieren.

Container sind leichter als virtuelle Maschinen, benötigen aber trotzdem Ressourcen. Container Runtime, Images, temporäre Dateien, Logs und persistente Daten müssen im realen Betrieb in das Flash-, RAM- und CPU-Budget passen.

GPIOs, USB-Geräte, serielle Schnittstellen, Kameras, Netzwerkadapter und weitere Peripherie bleiben explizite Integrationsaufgaben. Berechtigungen, Gerätedateien, Schnittstellenstabilität und Fehlerverhalten müssen auf Systemebene geplant werden.

Container-Images werden üblicherweise unveränderlich behandelt. Konfigurationen, Kalibrierwerte, Nutzdaten und Logdaten benötigen deshalb ein klar definiertes Persistenzkonzept.

Ein neues Container-Image ist kein vollständiges Updatekonzept. Es muss klar sein, wie Versionen freigegeben, verteilt, aktiviert und bei Fehlern zurückgenommen werden. Auch die Wechselwirkung mit Betriebssystem, Kernel und Gerätedaten ist zu berücksichtigen.

Containerisierung schafft keine Echtzeitfähigkeit. Zeitkritische Anforderungen müssen durch die gesamte Architektur erfüllt werden – von Hardware und Treibern über Betriebssystem und Scheduling bis zur Anwendung.

Container-Images kontrolliert erstellen und bereitstellen

Docker-Container sind nur dann belastbare Produktbausteine, wenn Herkunft, Version und Inhalt der verwendeten Images nachvollziehbar bleiben.

Kontrollierte und geprüfte Image-Quellen

Öffentliche Basis-Images können Entwicklung beschleunigen. Herkunft, Version und Eignung für das Zielsystem müssen jedoch geprüft werden.

Versionierte und freigegebene Artefakte

Nur geprüfte und freigegebene Images sollten auf Zielgeräte gelangen. Klare Versionsstände erleichtern Wartung und Fehleranalyse.

Keine vertraulichen Daten im Image

Zugangsdaten und Schlüssel gehören nicht in Dockerfiles oder Images. Sie benötigen ein separates Berechtigungs- und Verwaltungskonzept.

Containerisierung ist kein eigenständiger Sicherheitsnachweis. Sicherheit entsteht im Rahmen von Embedded Security Anpasungen und durch das Zusammenspiel von Systembasis, Berechtigungen, kontrollierten Images, Netzwerkarchitektur, Updateprozess und sauber entwickelter Software.

Containerisierung als Teil einer belastbaren Embedded-Architektur

SIGMA unterstützt nicht nur beim Einsatz einzelner Tools. Wir betrachten Containerisierung im Zusammenhang mit Linux-Systembasis, Zielhardware, Anwendung, Build-Prozess und Gerätebetrieb.

Container-Eignung und Architektur bewertenContainer-Eignung und Architektur bewerten
Wir analysieren Zielhardware, Linux-Basis, Ressourcen, Schnittstellen und Anwendungsstruktur. Daraus entsteht eine technisch begründete Entscheidung, ob und in welchem Umfang Containerisierung sinnvoll ist.
Embedded Linux / Yocto integrierenEmbedded Linux und Yocto integrieren
Wir entwickeln und integrieren die passende Systembasis für die Zielplattform: vom Linux-System und den benötigten Laufzeitkomponenten bis zu Kernel, Treibern, Board-Konfiguration und Systemdiensten.
Build, Test und CI/CD strukturierenBuild, Test und CI/CD strukturieren
Wir unterstützen beim Aufbau reproduzierbarer Build-Prozesse, automatisierter Tests, nachvollziehbarer Versionierung und kontrollierter Artefaktverwaltung.
Update, Recovery und Übergabe planenUpdate, Recovery und Übergabe planen
Wir berücksichtigen Aktualisierbarkeit, Datenpersistenz, Rückfallstrategie und technische Dokumentation frühzeitig. Damit wird aus einem Image ein langfristig betreibbares Produktkonzept.
Relevante SIGMA-Kompetenzen für Ihre Container-Architektur
Docker
Linux / Yocto
Git
ARM-Plattformen
BSPs & OS-Images
Kernelentwicklung
RAUC
CI/CD

In sechs Schritten zur passenden Container-Architektur

Ausgangssystem erfassen

Ausgangssystem erfassen

Zielhardware, Betriebssystem, Anwendungen, Schnittstellen sowie bestehende Build- und Releaseprozesse aufnehmen.

Container-Grenzen definieren

Container-Grenzen definieren

Festlegen, welche Komponenten zur Systembasis gehören und welche Dienste sinnvoll containerisiert werden können.

Referenzarchitektur entwickeln

Referenzarchitektur entwickeln

Image-Struktur, Berechtigungen, Persistenz, Logging, Registry und Bereitstellungsweg definieren.

Build und Test automatisieren

Build und Test automatisieren

Build, Tests und Artefakterzeugung in einen nachvollziehbaren Prozess überführen – passend zur Zielarchitektur.

Auf Zielhardware validieren

Auf Zielhardware validieren

Ressourcen, Startverhalten, Schnittstellen, Ausfallszenarien und Updatepfade auf dem realen Zielsystem prüfen.

Dokumentieren und Übergeben

Dokumentieren und übergeben

Architektur und Betriebsprozesse dokumentieren, transparent abstimmen und langfristig wartbar übergeben.

Containerisierung braucht Embedded-Verständnis unterhalb der Anwendungsebene

Ein Docker-Image allein macht aus einer Anwendung kein zuverlässig betreibbares Embedded-Produkt. Entscheidend ist das Verständnis für die gesamte Kette – vom SoC und der Zielhardware über das Betriebssystem, Kernel und Treiber bis zur Anwendung, zum Updateprozess und zur Wiederherstellung im Fehlerfall.

SIGMA verbindet diese Ebenen in der Embedded-Softwareentwicklung. Wir produzieren keine Hardware und sind nicht an einzelne Plattformanbieter gebunden. Dadurch bewerten wir Technologien wie Docker, Yocto oder GitLab anhand ihres tatsächlichen Nutzens für Ihr Gerät.

Linux, Yocto und ARM als Systembasis

Containerisierung wird bei SIGMA auf Grundlage von Linux-, Yocto-, BSP- und ARM-Erfahrung eingeordnet.

Plattformunabhängige Softwareentwicklung

Wir bewerten Architekturen nach Zielhardware, Produktanforderungen und langfristiger Wartbarkeit.

Erfahrung mit langlebigen Geräten

Wir entwickeln robuste, nachvollziehbare Software für Geräte mit langfristigem Betrieb.

FAQ

Nein. Containerisierung ist nicht ausschließlich an Linux gebunden. Moderne Windows-Systeme unterstützen ebenfalls Windows-Container.

Im Embedded-Umfeld wird Docker-basierte Containerisierung jedoch überwiegend auf Linux-Systemen eingesetzt. Linux lässt sich mit Buildsystemen wie Yocto gezielt auf Zielhardware zuschneiden. Zudem sind Container-Technologien dort breit etabliert und die Systembasis kann präzise auf Ressourcen, Treiber, Schnittstellen und den geplanten Gerätebetrieb abgestimmt werden.

Windows Embedded Compact beziehungsweise WinCE ist nicht mit modernen Windows-Container-Umgebungen vergleichbar und in der Regel keine Docker-Zielplattform.

Nein. Ob Docker sinnvoll ist, hängt von Kernel-Konfiguration, Ressourcen, Anwendungsarchitektur, Sicherheitsanforderungen und Betriebsmodell ab. Bei sehr kleinen Systemen oder besonders schlanken Anwendungen kann eine native Integration die bessere Lösung sein.

Das kann für Anwendungen auf modernen Windows-Systemen grundsätzlich möglich sein. Entscheidend sind unter anderem die verwendete Windows-Version, die Kompatibilität zwischen Host und Container, die Anwendungsarchitektur sowie Anforderungen an Hardwarezugriffe und Betrieb.

Der Schwerpunkt dieser Seite liegt auf Linux-basierten Embedded-Systemen. Für Windows-Anwendungen sollte die technische Eignung deshalb projektbezogen bewertet werden.

Das ist grundsätzlich möglich, muss aber gezielt integriert werden. Gerätedateien, Rechte, Schnittstellenstabilität, Fehlerverhalten und Updatefähigkeit sind Teil der Systemarchitektur und nicht allein eine Docker-Konfiguration.

Nicht nativ. Die enthaltenen Anwendungen, Bibliotheken und Basis-Images müssen zur ARM-Zielarchitektur passen. Dafür können native ARM-Builds, Cross-Compilation oder Multi-Platform-Builds eingesetzt werden.

Ja. GitLab kann Versionsverwaltung, CI/CD-Pipelines und eine Container Registry verbinden. Die konkrete Ausgestaltung richtet sich nach Projektgröße, bestehender Infrastruktur, Zielarchitekturen und dem gewünschten Freigabeprozess.

Teilweise. Anwendungen können getrennt vom Basisbetriebssystem versioniert und aktualisiert werden. Abhängigkeiten zwischen Container Runtime, Kernel, Treibern, Systemdiensten und Anwendung müssen dennoch berücksichtigt werden.

Docker schafft keine Echtzeitgarantie. Bei zeitkritischen Funktionen müssen Latenz, Determinismus und Fehlerreaktion über Hardware, Treiber, Betriebssystem, Scheduling und Anwendung hinweg geplant und validiert werden.

Sprechen Sie mit uns!

Lösungen für Ihre Branche und Ihre Prozesse stellen wir Ihnen gerne vor. Sprechen Sie mit den Spezialisten für den Mittelstand.

Jetzt anfragen
Roxana Bergt
Roxana BergtVertrieb | Projektmanagement Embedded