Docker: Streamlined DevOps with a little overhead
March 03, 2018

Docker: Streamlined DevOps with a little overhead

Brian Dentino | TrustRadius Reviewer
Score 8 out of 10
Vetted Review
Verified User
Review Source

Overall Satisfaction with Docker

Docker is used across our whole engineering organization. It is used to simplify packaging and deployment of the apps and services we develop. Using docker allows us to match our development environment more closely to production and run polyglot applications without worrying about cross-cutting software dependencies and server configuration.
  • Simple interface for defining and building an application runtime environment. This makes applications easy to inspect because aspects like exposed ports and environment variables can be defined declaratively and consistently.
  • Local environment parity with production. Docker manages dependency installation and allows you to easily run apps locally in the same environment as they run in production, giving you confidence that your app will work as expected when deployed and making configuration-related bugs easier to reproduce.
  • Makes applications easy to publish and distribute. Docker's image registry makes it extremely easy to publish your applications and distribute them securely. This makes deployment much simpler and provides version control for your application artifacts, making rollbacks very easy.
  • Docker has a bit of a learning curve, and it takes some time to become familiar with the tooling and syntax. Transitioning an existing architecture to docker can represent a significant investment.
  • Docker attempts to provide some level of cross-host container orchestration via swarm, but it falls short of third-party solutions like Kubernetes.
  • We occasionally run into stability issues when the docker daemon is subjected to high load (many applications starting/stopping frequently). In these cases, docker hangs and we have to restart or replace the node.
  • Docker has made it easy to refactor applications and isolate performance bottlenecks so that those aspects can be scaled independently. This has improved our overall application performance.
  • Docker has shortened our release cycle by enabling us to automate more of our testing/deployment pipeline. As a result, we are able to push new releases and bug-fixes more frequently.
  • Docker has reduced the incidence of bugs that only manifest in our production environment because developers are able to test locally with an identical configuration.
While Ansible and Docker focus on solving two different problems, we were previously using Ansible to ensure that all dependencies were automatically setup on new servers and that proper configuration was applied when new nodes were brought up. With docker, most of these dependencies and configuration items are isolated to and packaged with individual docker images, so we have been able to shift much of this configuration burden away from Ansible and into individual projects.

Heroku is a PaaS that simplifies deployment and application dependency management. For large-scale applications, it can get very expensive and docker provides the means to setup similar deployment and application linking/service-discovery on our own cluster. It also gives us greater control over application scheduling and resource usage.
Kubernetes, MongoDB, Amazon Elastic Compute Cloud (EC2), React, PostgreSQL
If you have an architecture that requires the use of multiple languages or many different microservices, docker is a great tool for managing the development and deployment of these services. It is also excellent for designing fault-tolerant production environments because 3rd-party orchestrators can be used to automatically replace failing applications with minimal server configuration. It may not be the best choice if you have a single monolithic application and a well-defined deployment pipeline.