Skip to content

balena-os/balena-engine

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
September 11, 2023 19:02
February 7, 2023 15:22
February 7, 2023 15:22
February 11, 2020 22:16
May 16, 2018 09:15
May 6, 2019 13:27
November 15, 2022 09:47
August 6, 2020 01:57
August 6, 2020 01:57
September 11, 2023 19:02
February 7, 2023 15:22
September 12, 2018 14:27
January 9, 2020 15:03
September 12, 2019 10:24
January 25, 2019 14:27
January 19, 2021 15:41
September 11, 2023 19:02
November 15, 2022 12:06
December 6, 2022 03:29
December 6, 2022 03:29
September 5, 2019 20:57
November 15, 2022 09:47

balenaEngine

moby-based container engine for IoT

Highlights

  • Small footprint: 3.5x smaller than Docker CE, packaged as a single binary
  • Multi-arch support: Available for a wide variety of chipset architectures, supporting everything from tiny IoT devices to large industrial gateways
  • True container deltas: Bandwidth-efficient updates with binary diffs, 10-70x smaller than pulling layers
  • Minimal wear-and-tear: Extract layers as they arrive to prevent excessive writing to disk, protecting your storage from eventual corruption
  • Failure-resistant pulls: Atomic and durable image pulls defend against partial container pulls in the event of power failure
  • Conservative memory use: Prevents page cache thrashing during image pull, so your application runs undisturbed in low-memory situations

Motivation

balenaEngine is a container engine purpose-built for embedded and IoT use cases and compatible with Docker containers. Based on Docker’s Moby Project, balenaEngine supports container deltas for 10-70x more efficient bandwidth usage, has 3x smaller binaries, uses RAM and storage more conservatively, and focuses on atomicity and durability of container pulling.

Since 2013, when we first ported Docker to ARMv6 and the Raspberry Pi, the balena team has been working in and around the Docker codebase. Meanwhile, having seen IoT devices used in production for tens of millions of hours, we’ve become intimately acquainted with the unique needs of the embedded world. So we built a container engine that runs Docker containers just as well, shares the Docker components that are needed for our use case, and is augmented with the IoT-specific features that we’ve built out over time.

Transitioning from Docker CE

We left out Docker features that we saw as most needed in cloud deployments and therefore not warranting inclusion in a lightweight IoT-focused container engine. Specifically, we’ve excluded:

  • Docker Swarm
  • Cloud logging drivers
  • Plugin support
  • Overlay networking drivers
  • Non-boltdb discovery backends (consul, zookeeper, etcd, etc.)
  • Buildkit (although support can be enabled using a build tag)

Unless you depend on one of the features in Docker that balenaEngine omits, using balenaEngine should be a drop-in replacement.

License

balenaEngine is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.