What do you like best?
Docker popularized the practice of running apps and services inside isolated containers. The underlying technology and practices were already available to a degree, but to use those technologies in a meaningful way, you once had to build quite a bit of tooling and infrastructure on your own.
Docker-the-tool makes this process easier using a friendly API and CLI, and because Docker-the-company is well funded, additional tools have emerged that make the process even simpler. For example, docker-compose lets you spin up an entire cluster of interconnected containers on your local machine using a single YAML file. Then, you can make some minor changes to that file, and use the Tutum service to manage deploying a cluster of production machines running those same service.
What do you dislike?
There is still a lack of coherent documentation that describes how to build an entire stack of software, with horizontal scaling, zero-downtime deploys, and so forth. There are also some security-related anti-patterns that can be easily overlooked at first (such as using the "root" user inside a container).
It can also be difficult or impossible to work on "Dockerfiles" (build scripts for docker images) when you have no connectivity, limited connectivity, or bandwidth caps. This is due to a need to re-run the entirety of any step that was changed. For example, if you have a step that pulls in 100MB of packages, and you want to add one more package to that list, then rebuilding will cause the entire set of packages to be re-downloaded in the typical use case.
Finally, with some types of language ecosystems, it's difficult to run a development environment inside a set of containers while also using a hot-reloading environment. You can build and test containers locally pretty quickly, but that is still slower than not rebuilding at all in those types of development scenarios.
Recommendations to others considering the product
Pay attention to good security practices, and to avoid corresponding anti-patterns.
Use "docker-machine" to isolate your Docker environment on your development systems.
Use "docker-compose" to prepare stacks of containers to run in your development environment.
Evaluate the Tutum service (recently acquired by Docker, Inc.) as a way to deploy stacks of containers to your production and QA infrastructure.
What business problems are you solving with the product? What benefits have you realized?
We chose to replace a monolithic, vertically-scaled app deployment system with horizontally-scaled Docker containers running on AWS and managed by the Tutum service.
So far, the direct benefits we've realized have been faster deployment times, easier and more trustworthy deployment workflows, and better separation and monitoring of services at runtime.
The net effect has been that our app and its services have been performing faster, we are deploying more frequently, and we can now modularize our code more effectively to optimize for memory consumption.
Last but not least, we achieved a reduction in our monthly hosting costs!