Overall Satisfaction with Docker
We use Docker as the backbone of our hosted app infrastructure. Every element of our application is broken down into a microservice; these miniature services are then built into Docker containers and deployed directly to AWS cloud. Docker lets us deterministically build, distribute, and deploy all of our services without any ambiguity as to what's being deployed and why.
- Deterministic application state and deployments.
- Consistent version history for previous builds.
- Easy distribution mechanisms across the team.
- Docker does update quickly, sometimes the updates to the engine break older container images.
- Some of the changes to the Dockerfile structure are confusing and incompatible with older versions, challenging teams.
- Docker has dropped our production deployment time from 15-20 minutes to 2-5 seconds. We can ship more code, faster, with fewer problems.
- Docker has helped decrease the number of hours required to maintain aging virtual machines. As the application is containerized, it can move from one VM to another with zero downtime, meaning we can wholesale _replace_ outdated servers rather than spend time updating them.
Docker runs both locally and on the server, whereas VirtualBox is only used locally to create a development environment. Docker gives us the ability to have the exact same environment both in the cloud and on individual developers' laptops. There are no surprises for the team, as our code runs in the exact same environment both during development and in production for actual customers.