In order to make better decisions mind tradeoffs. For instance for Docker here is my list.
- mobility. Your app become more mobile, easy to deploy.
- better version control. You can always revert in no time
- single approach for app deployment
- easy to scale
- storage for source code (dockerhub, docker cloud)
- longer app deploy time
- longer app compile time
- more storage used
- less responsive code in development
- change every process from deployment to backup
- easier to shoot self in foot with wrong data storage design
- new abstraction layer = more knowledge to acquire
- it's harder to recover data in case of loss
- testing process will include one more step