Container orchestration in the embedded space lacks a good story and vision. This article explains where we currently are and what we have planned for the future.
Where We Are
Foundries.io has chosen Docker App as our container orchestration system for a few reasons:
- We are focused on seamless single node container management.
- Multi-node things like ks3 add complexity and resource constraints most single-node use cases don't need.
- Docker App addresses key things that docker-compose lacks.
The current version of Docker App integrated into the platform was done before the 0.9 version of Docker App was released. At that time it didn't handle pushing/pulling from Docker Registries very well and also required Docker Swarm which was being debated internally. A slightly awkward approach was chosen:
- We push a single .dockerapp into the TUF repositry server.
- aktualizr-lite pulls that down and "renders" it to a docker-compose.yml.
- aktualizr-lite then manages it with docker-compose commands.
Docker App 1.0 will not include the "render" function currently used. However, its support of "app bundles" will work in a much better way. So the new approach will look like:
- LMP boots with local only single node Docker Swarm.
- Docker App bundles get pushed into the hub.foundries.io registry.
- aktualizr-lite will be able to pull these bundles down (pretty much like docker-pull).
- aktualizr-lite will use the "docker-app run/update/rm" commands to manage things.
This will allow the LMP to drop docker-compose which is pretty slow on embedded systems and adds several megabytes of size to the image. Docker Swarm does have some benefits versus docker-compose including a much richer way to control application failures and there is also some thought within the Docker App project about making single node systems work without relying on Docker Swarm.
This does mean some legacy users might want to migrate their devices from the old Docker App style to this new style. Work is being planned to create a migration script or add an enhancement to aktualizr-lite that:
- Detects the change from old->new
- Stops and remove the docker-compose app(s).
- Start up the new style Docker App(s).