Distributing your complex app is getting some assistance from Red Hat in the form of a cut-down operating system that acts as a docker host.
Operating systems, don't you just hate them! You spend all your time building an application and then when you try to distribute it you discover that the operating system has to be just right for it all to work.
You might think that your app doesn't make too many assumptions, but when it comes to moving it from a desktop machine to a virtual machine or to cloud host things tend to be more complicated.
This is the problem that application containers like Docker are designed to solve. Docker provides a container, complete with all dependencies that you can place your app inside. The container can then be hosted on any Linux OS - without having to solve the dependency problem again.
You can think of this as a development on the idea of packaging your application within a virtual machine - i.e. an appliance. The big difference is that a container doesn't come with an OS and this means it can be hosted wherever a basic OS can be found - on bare metal, virtual machine or cloud. It also makes it possible to move the application by simply copying the container.
At the moment the recommended, dare I say canonical, Docker host is Ubuntu, but this might be about to change if an announcement at the Red Hat Summit event comes to fruition.
Project Atomic is a stripped down version of Red Hat Linux that you can run as a virtual machine. Currently Atomic Fedora 20 VM will run on VirtualBox or QEMU and more are promised. To get started you simply load the image and log on. You can update Atomic with a single command and this is one of its advantages as you can also roll back an update. There is a New UI in the form of Cockpit and you can provision Docker containers very easily. You can also use GearD, an OpenShift Origin project, designed to make it easy to move applications to different environments. The idea is to allow orchestration of multiple containers into a single system.
The container idea is something that is going to become more important as the technology develops and we get more used to the idea that an application has to include all of its dependencies if it is going to be easy to set up and easy to move.