Overall Satisfaction with Docker
We use Docker as part of a rapid deployment project that allows a service to be easily deployed directly onto VMs automatically during staging and production. It makes the management of the VM a parallel task to the deploy process. Traditionally the provision of a VM would be intertwined with the deploy process and containerization allows for these things to be decoupled.
- Containerization - allowing multiple micro-services to function together without in-depth orchestration at the VM level.
- Rapid deployment - a developer with appropriate access can simply push to the correct remote and the deploy happens automatically from there
- Decouples provisioning from VM administration - allows containers to be deployed (more) regardless of VM set up.
- Containers are often opaque - if a container doesn't work out of the box, it's messy to fix.
- Logging is complexified by the multiple containers and logs are often not piped to places you expect them to be.
- Networking is complexified due to internal port mapping between containers, etc.
- Allows us to easily develop and deploy small projects without significant overhead.
- Is one more requirement for DevOps hires.
- Allows us to choose the best cost solution for hosting each service without locking in to that solution long term.
Docker provides less lock in and more portability than Heroku. You can also easily self host or choose a Docker hosting service. Additionally, there is a wide availability of Docker containers where Heroku build packs are somewhat more limited. Heroku offers a more turnkey approach at times and has a quicker initial time to deploy.