Programming great software is one thing - to deploy it is a complete different thing. By deploying, we mean the installation or setup of the software on a different machine from where it was developed. Software deployment is necessary for production shipment but also for testing and collaboration in the same development environment.
All too often, this is a painful and unrewarding process. Commonly numerous implicit and explicit dependencies must be fulfilled by the target environment. For example, a SQL database may have to be installed or a specific version of a Python interpreter must be made available. Usually the developer would just expect the user to operate the software in the appropriate environment; but to get to this set up is often cumbersome and non-trivial task.
Docker comes to the rescue! Docker is a computer program that performs operating-system-level virtualization also known as containerization. Docker is a tool that can package an application and its dependencies in a virtual container that can run on any Linux server. Think of it as a light-weight virtual machine. It is based on Linux containers but provides a user-friendly abstraction to it, making its usage extremely simple.
Docker containers can be a useful method for building up space mission ground systems in terms of a micro-service architecture. For example, a mission control system is usually compose of various software components for telecommand preparation and telemetry checking, as well as automation and data storage. Building these components as Docker containers helps to allow for scaling and redundancy management, and an overall modularisation of the system.
This presentation will introduce the basics on how to create and run Docker containers. Using the example of an open-source NoSQL database with an REST API as developed by the author, a practical inside into the syntax and quirks of Docker will be given. Finally, a number of dockerized open source projects for use in CubeSat missions will be shown.