When Build, Test, and Release No Longer Align in a Traceable Manner

In established embedded projects, dependencies often develop gradually. Build environments vary, libraries are maintained manually, and releases depend on specific computers or the expertise of individuals. As the product’s lifecycle extends, this becomes a technical and organizational risk.

 

Nicht reproduzierbare Build-UmgebungenNon-reproducible build environments
An application works on the development computer but cannot be reliably reproduced on another system or during the subsequent build process. Differences in toolchains, library versions, and local configurations lead to varying results.
Unklare AbhängigkeitenUnclear Dependencies
Applications, system libraries, configuration files, and services become increasingly intertwined over the years. A change to one component can have unexpected effects on other parts of the system - especially when responsibilities and versioning are not clearly separated.
Manuelle Releases & UpdatesManual Releases and Updates
If build, test, release, and deployment processes are not defined end-to-end, avoidable risks arise. It remains unclear which software version is running on which device, what changes are included, and how to revert to a working version in the event of errors.

Docker containers are not always Linux-based

Containerization is not limited to Linux. Modern Windows systems can run Windows containers. For Linux, however, Docker and similar container technologies provide particularly well-established mechanisms for packaging and isolating applications.

 

Linux-based embedded systems

 

  • Typical use cases for Docker on ARM-based target devices
  • Yocto enables a finely tailored Linux system base
  • Suitable for separating Linux applications from their runtime dependencies

Modern Windows Systems

 

  • Windows containers can be an option for suitable Windows applications
  • Typically requires a compatible modern Windows host
  • Suitability depends on the Windows version, application architecture, and operating environment

Containerizing traditional Windows applications requires a customized technical assessment. Windows Embedded Compact (WinCE) is not equivalent to modern Windows container environments and is generally not a Docker target platform.

 

Containerization is not a complete embedded system architecture

The following technical overview focuses on Linux-based embedded systems. Here, the kernel, drivers, and a system base - created, for example, with Yocto - form the foundation on which Docker containers can be run.

Containerization structures the application layer. It does not replace embedded Linux, the kernel, and drivers, nor does it replace an update, persistence, or recovery strategy.

Docker-based containers encapsulate applications and their defined user-space dependencies. This can make development, testing, and deployment significantly more manageable. However, the hardware-close system base remains a central task of embedded development.

Was Containerisierung leisten kannWhat Containerization Can Do
- Clearly delineate applications and their runtime dependencies
- Version and deploy individual services separately
- Make build and test environments more reproducible
- Create defined images as traceable release artifacts
- Organize versioned application releases in a more controlled manner
Was auf Systemebene entschieden werden mussDecisions That Must Be Made at the System Level
- Bootloader, Linux kernel, device tree, and drivers
- Hardware access to interfaces and peripherals
- System services, user permissions, and network architecture
- Resource management, startup behavior, and real-time requirements
- System updates, persistence, recovery, and fallback strategies

The Difference Between Containerization and Virtualization

Containers and virtual machines both aim to isolate applications from one another. However, their technical implementation is fundamentally different.

 

CriterionContainerVirtual Machine
Operating System Uses the host's operating system Includes its own guest operating system
Linux kernel Shared with the host system Runs within the respective guest operating system
Resource Requirements Generally lower, depending on the application and brand image Higher Performance Through an Additional Operating System and Virtualization
Start-up behavior Typically faster, depending on the application and initialization System startup usually takes longer
Isolation Separation at the operating system level Separation via Virtualized Hardware
Typical Embedded Application Modularization of Linux Applications on Appropriate Target Devices Specific requirements for platform separation or runtime environments

This does not automatically make containers the better solution. For embedded projects, the key question is:

 

Does the container boundary improve maintainability, repeatability, and updatability to such an extent that it justifies the additional operational overhead?

When Docker Containerization Makes Sense in an Embedded Environment

Containerization is not a standard component for every device. It should be used when it provides a clear technical benefit.

 

Docker containerization is often useful when …

 

  • multiple services or applications need to be versioned separately
  • applications have clear dependency boundaries
  • build and test environments need to be reproducible
  • individual components need to be updated independently of the base OS
  • a clear build, test, and release process needs to be established

A different architecture may be more suitable if …

 

  • Flash, RAM, or CPU resources are very limited
  • a lightweight native application can perform the same task more easily
  • hardware access is very tightly and privilegedly tied to the application
  • particularly deterministic response times are a key priority
  • a container runtime makes device operation disproportionately complex

The decision is not based on a single criterion. SIGMA evaluates the target hardware, target system, application architecture, interfaces, resources, and planned device operation in their overall context.

 

The Key Components of a Docker and CI/CD Architecture

Dockerfile

A Dockerfile provides a clear description of how a container image is built: base image, dependencies, build steps, and the application's startup behavior.

 

Container Image

A container image is a versioned application artifact. It contains the application and its defined runtime dependencies in a reproducible state.

 

Container

A container is a running instance of an image. Resources, permissions, network and device access, and data paths are configured for operation.

 

Docker Hub

Docker Hub is a public container registry for base and application images. For production systems, the origin, version, and suitability of the images used should be verified.

 

Git

Git tracks versions of source code, configurations, build descriptions, and pipeline files. Changes remain traceable and reflect a defined stage of development.

 

CI/CD Pipeline

A CI/CD pipeline automates recurring steps such as building, testing, artifact storage, and deployment. This reduces reliance on manual processes.

 

How Docker Works on an Embedded System

 

On the target hardware, an embedded Linux kernel - built using Yocto, for example - provides the kernel, drivers, and system services. On top of that, the Docker Engine runs applications in separate containers.

  • Containers: contain the application, runtime libraries, and their own file system
  • Common foundation: All containers use the host system’s Linux kernel
  • Clear boundary: The bootloader, kernel, drivers, and hardware integration remain part of the system foundation

From Source Code to a Traceable Release

Code und Dockerfile versionieren

Versioning Code and Dockerfiles

The application, build description, and tests are stored in a traceable manner in the Git repository

GitLab Pipeline

Run a GitLab Pipeline

A GitLab Runner executes the defined build and test steps of the pipeline

ARM Image erzeugen

Create an ARM Image

The container image is built to match the target architecture of the embedded system

Image in Registry ablegen

Store Image in Registry

Verified versions are deployed with version numbers in a container registry

Kontrolliert ausliefern

Controlled Deployment

The target device receives the approved image through the designated update or deployment process

GitLab in the Embedded Workflow

GitLab can integrate Git repositories, CI/CD pipelines, and a container registry into a single platform. GitHub can also be used for version control and automated workflows. Which environment is right for your project depends on your existing infrastructure, permission model, and build process.

 

Yocto provides the system foundation - Docker structures the application

An Yocto-based embedded Linux system can be specifically tailored to the target hardware and product requirements. The bootloader, kernel, drivers, system services, and the required software scope are defined at the system level.

Docker builds on top of this foundation. Containers organize applications and their dependencies without decoupling the embedded system from its hardware-related responsibilities.

Yocto-based system foundation

  • Bootloader, kernel, and drivers
  • Board-specific configuration
  • Hardware access and interfaces
  • User permissions, networking, and system services
  • Foundation for updates, recovery, and operational security

Containerized application layer

  • Separate application components
  • Defined libraries and runtime dependencies
  • Reproducible build environments
  • Versioned container images
  • Application releases that can be planned separately

A container can only operate reliably if the underlying Linux system is compatible with the device's hardware, application, and planned lifecycle. This architecture describes the Linux-based approach. Modern Windows containers have different requirements regarding the host system, compatibility, and operating model.

 

What Else Matters When It Comes to Containerization on Embedded Devices

On Linux systems, Docker containers use the host system's kernel. However, the application and its native libraries within the container must be compatible with the target device's CPU architecture.

A container image built for an Intel or AMD machine with x86_64 will not run natively on an ARM-based embedded system - such as one with an i.MX system on chip. The fact that both systems run Linux is not sufficient.

The image must therefore be built to match the target architecture. Depending on the project, options include native ARM builds, cross-compilation, or multi-platform builds using appropriate build environments. GitLab CI/CD can automate this architecture-specific build and test pipeline.

Containers are lighter than virtual machines, but they still consume resources. In real-world operations, container runtimes, images, temporary files, logs, and persistent data must fit within the flash, RAM, and CPU budgets.

GPIOs, USB devices, serial interfaces, cameras, network adapters, and other peripherals remain explicit integration tasks. Permissions, device files, interface stability, and error handling must be planned at the system level.

Container images are typically treated as immutable. Configurations, calibration values, payload data, and log data therefore require a clearly defined persistence strategy.

A new container image is not a complete update strategy. It must be clear how versions are released, distributed, activated, and rolled back in the event of errors. Interactions with the operating system, kernel, and device data must also be taken into account.

Containerization does not provide real-time capability. Time-critical requirements must be met by the entire architecture - from hardware and drivers, through the operating system and scheduling, all the way to the application.

Create and Deploy Container Images in a Controlled Manner

Docker containers are reliable product components only if the origin, version, and contents of the images used remain traceable.

 

Controlled and Verified Image Sources

Public base images can speed up development. However, their origin, version, and suitability for the target system must be verified.

Versioned and Approved Artifacts

Only tested and approved images should be deployed to target devices. Clear versioning simplifies maintenance and error analysis.

No Confidential Data in the Image

Credentials and keys do not belong in Dockerfiles or images. They require a separate authorization and management strategy.

Containerization is not a standalone security guarantee. Security is achieved through embedded security customizations and the interplay of the system foundation, permissions, controlled images, network architecture, the update process, and well-developed software.

Containerization as Part of a Resilient Embedded Architecture

SIGMA doesn't just provide support for using individual tools. We consider containerization in the context of the underlying Linux system, target hardware, applications, the build process, and device operation.

 

Container-Eignung und Architektur bewertenEvaluate Container Suitability and Architecture
We analyze the target hardware, Linux environment, resources, interfaces, and application structure. This analysis leads to a technically sound decision on whether and to what extent containerization is appropriate.
Embedded Linux / Yocto integrierenIntegrating Embedded Linux and Yocto
We develop and integrate the appropriate system foundation for the target platform: from the Linux system and the necessary runtime components to the kernel, drivers, board configuration, and system services.
Build, Test und CI/CD strukturierenOrganizing Build, Test, and CI/CD
We provide support in establishing reproducible build processes, automated testing, traceable versioning, and controlled artifact management.
Update, Recovery und Übergabe planenPlan Updates, Recovery, and Handover
We take into account updatability, data persistence, fallback strategies, and technical documentation early on. This transforms an image into a product concept that can be operated over the long term.
Relevant SIGMA expertise for your container architecture
Docker
Linux / Yocto
Git
ARM platforms
BSPs & OS images
Kernel development
RAUC
CI/CD

Six Steps to Finding the Right Container Architecture

Ausgangssystem erfassen

Assess the Existing System

Document the target hardware, operating system, applications, interfaces, and existing build and release processes.

Container-Grenzen definieren

Defining Container Boundaries

Determine which components are part of the system foundation and which services can be effectively containerized.

Referenzarchitektur entwickeln

Develop a Reference Architecture

Define the image structure, permissions, persistence, logging, registry, and deployment path.

Build und Test automatisieren

Automating Builds and Tests

Integrate builds, tests, and artifact generation into a traceable process - tailored to the target architecture.

Auf Zielhardware validieren

Validate on Target Hardware

Check resources, startup behavior, interfaces, failure scenarios, and update paths on the actual target system.

Dokumentieren und Übergeben

Documentation and Handover

Document the architecture and operational processes, coordinate them transparently, and hand them over in a way that ensures long-term maintainability.

Containerization requires an understanding of embedded systems below the application layer

A Docker image alone does not turn an application into a reliably operable embedded product. What matters most is an understanding of the entire chain - from the SoC and target hardware, through the operating system, the kernel, and drivers, to the application, the update process, and recovery in the event of a failure.

SIGMA integrates these layers in embedded software development. We do not manufacture hardware and are not tied to any specific platform providers. This allows us to evaluate technologies such as Docker, Yocto, or GitLab based on their actual benefits for your device.

Linux, Yocto, and ARM as the System Foundation

At SIGMA, containerization is approached based on experience with Linux, Yocto, BSP, and ARM.

 

Platform-Independent Software Development

We evaluate architectures based on target hardware, product requirements, and long-term maintainability.

 

Experience with durable devices

We develop robust, traceable software for devices designed for long-term operation.

 

FAQ

No. Containerization is not exclusively tied to Linux. Modern Windows systems also support Windows containers.

In the embedded environment, however, Docker-based containerization is predominantly used on Linux systems. Linux can be tailored specifically to target hardware using build systems such as Yocto. In addition, container technologies are widely established there, and the system foundation can be precisely tailored to resources, drivers, interfaces, and the planned device operation.

Windows Embedded Compact (WinCE) is not comparable to modern Windows container environments and is generally not a Docker target platform.

No. Whether Docker is a good fit depends on the kernel configuration, resources, application architecture, security requirements, and operating model. For very small systems or particularly lightweight applications, native integration may be the better solution.

In principle, this may be possible for applications running on modern Windows systems. Key factors include the version of Windows used, compatibility between the host and the container, the application architecture, and requirements for hardware access and operation.

This page focuses on Linux-based embedded systems. For Windows applications, technical suitability should therefore be evaluated on a project-by-project basis.

In principle, this is possible, but it must be integrated in a targeted manner. Device files, permissions, interface stability, error handling, and the ability to update are part of the system architecture and not merely a Docker configuration.

Not native. The included applications, libraries, and base images must be compatible with the target ARM architecture. To achieve this, native ARM builds, cross-compilation, or multi-platform builds can be used.

Yes. GitLab can integrate version control, CI/CD pipelines, and a container registry. The specific implementation depends on the project size, existing infrastructure, target architectures, and the desired release process.

To some extent. Applications can be versioned and updated separately from the underlying operating system. However, dependencies between the container runtime, kernel, drivers, system services, and the application must still be taken into account.

Docker does not provide a real-time guarantee. For time-critical functions, latency, determinism, and error handling must be planned and validated across hardware, drivers, the operating system, scheduling, and the application.

Talk to us!

We will be happy to present solutions for your industry and your processes. Talk to the specialists for SMEs.

request now
Thomas Heinke
Thomas HeinkeHead of sales department
Roxana Bergt
Roxana BergtSales | Project Management Embedded