Whether it be from your development machine to a remote server for production,
or packaging everything for use elsewhere, it is always a challenge when it
comes to porting your application stack together with its dependencies and
getting it to run without hiccups. In fact, the challenge is immense and solutions
so far have not really proved successful for the masses.
In a nutshell, docker as a project offers you the complete set of higher-level
tools to carry everything that forms an application across systems and machines
- virtual or physical - and brings along loads more of great benefits with it.
Docker achieves its robust application (and therefore, process and resource)
containment via Linux Containers (e.g. namespaces and other kernel features).
Its further capabilities come from a project's own parts and components, which
extract all the complexity of working with lower-level linux tools/APIs used
for system and application management with regards to securely containing processes.