I got a chance to evaluate Docker over the past few days. This is a type of a toolkit that is going to fundamentally change how you think of application deployments, in the cloud or on-premises.
What Docker boils down to is this. Rather than deploying your application in a dedicated VM or hardware, and manually installing all the components you might need, you specify a descriptor file (Dockerfile). This Dockerfile describes everything your application needs, including operating system, additional packages, storage volumes, and the entry point.
Your application then runs in a light-weight run time that includes everything it needs. Because Docker is lighter weight than VM, and provides less isolation, you can run more Docker containers on a single host than you can VMs. It is a much more efficient use of resources than VMs. Furthermore, because your Docker container remains unchanged between development, qa and production environments you are assured that your application will behave the exact same way in all of your environments.
Docker reminds me of Solaris Containers. In fact, it is based on Linux containers, a very similar technology. The concept predates Solaris, even. For those of us who had to work with IBM MVS years ago Dockerfile format is strikingly similar to JCL. Docker has the potential to fundamentally change how we approach software architecture, and do to cross-platform server platforms what Java never could.