If you work in IT, you are most likely familiar with Docker. But if you work in embedded software, you are probably wondering what it is and why its use has become so popular. At its core, Docker is a toolset for building and managing Containers. Containers are very similar to Virtual Machines (VMs), but they are lightweight and use a shared kernel. As an example, one of the smallest Linux containers comes in at 5 megabytes.
What are the Advantages of Containers?
Containers have many advantages over traditional VMs. One of the most compelling is that they are built from very simple scripts called Dockerfiles. A simple Dockerfile with a dozen lines of code can build a functional Linux distribution or even a fully configured Apache server. Widely adopted into IT applications for years now, Docker containers have the ability to spin up servers quickly. These isolated services have made them a staple in the world of web apps.
Docker’s Use in Embedded Software
So why is an IT toolset gaining traction in the embedded world? One phrase every embedded engineer has heard in their career is, “Well, it builds on my machine.” Over the years, our development machines collect dozens of toolchains and libraries to compile projects targeted at various architectures and hardware. This can make it almost impossible to recreate a build environment for a specific project reliably.
By creating a Container for each project, you end up with a portable build environment with minimum tools and dependencies for that project. And, because they can be created from a simple text file, the file itself can be stored in the project’s reproduction. Visual Studio Code, a freeware source-code editor, has a built-in Containers Extension that will build the container from the file and re-open the project inside it for development. Jenkins, an open-source automation server, also has a plugin to build Containers as on-demand build nodes. This allows every project to end up with its own continuous integration solution.
At Up-Rev, we have been adopting the practice of Development Containers, and the feedback has been great. Team members don’t have to spend time trying to recreate build environments. And, when we deliver a project to the customer, we can hand off a full product and development solution that can be used in the future for maintenance and product updates. If you would like more information on this topic, please contact us. We are here to serve as your engineering and manufacturing partner!