August 14, 2019
Score 10 out of 10
Overall Satisfaction with Docker
Docker is used by most of our teams as part of their development and deployment practice. For development, it enables engineers to build applications in the same environment without worrying about local configuration issues. Nearly all of our CI/CD and infrastructure runs in Docker containers as well, which makes debugging production issues (especially around deployment) as simple as pulling down the right image and poking at it locally.
- Isolation of dependencies.
- "Black box" services like databases and packaged applications.
- Infrastructure as code.
- The CLI can take some getting used to if you aren't familiar with it.
- For running many Docker containers locally, you'll need a lot of disk and RAM.
- There are a lot of concepts to be familiar with when learning Docker, and the documentation could be more beginner-focused.
- It has simplified our deployment significantly, making it easier to push out changes to our customers.
- It has made our developers more efficient.
- Since it is such a widely-used technology, onboarding is much simpler.
Docker's CLI has a lot of options, and they aren't all intuitive. And there are so many tools in the space (Docker Compose, Docker Swarm, etc) that have their own configuration as well. So while there is a lot to learn, most concepts transfer easily and can be learned once and applied across everything.
The community support for Docker is fantastic. There is almost always an answer for any issue I might encounter day-to-day, either on Stack Overflow, a helpful blog post, or the community Slack workspace. I've never come across a problem that I was unable to solve via some searching around in the community.
I have used Vagrant for consistent development environments as well. It is a more "heavyweight" solution since it's a complete virtual machine that requires a host like VirtualBox in order to run. With Docker, the container is much more lightweight and just requires the docker daemon to be installed locally, and then I can run any container in the world with just the CLI.
Docker is the best widely-used solution for isolated development environments and predictable deployments. However, for teams that work with only one specific technology stack, using Docker for local development can introduce more complexity. It shines when teams have to move between many different types of projects, but is "overkill" for a single application with minimal dependencies.