I’ve been using Docker on EC2 for the past year now. I agree with most everything that Jerry said. The biggest problem I have with AMI snapshots is that you loose visibility of what’s actually in the AMI. Try doing a diff between versions 1.0 and 1.1. This is where the Dockerfile provides a lot of visibility into what your app is composed of.
We use Amazon’s CloudFormation to provision our AWS infrastructure and the application. We CloudFormation to capture everything from IAM roles, security groups, Route53 entries, etc… But provisioning the application is where things get funky with CloudFormation. CloudFormation helped us have more visibility into what was in the application, but as an application configuration tool, CloudFormation kind of blows. It’s probably a great example of when NOT to use JSON for as configuration format, and I’ll leave that
I started using Docker as a means decouple the application configuration from CloudFormation. The other benefit of this is that I could also run my application in a container on my desktop using Boot2Docker. This made local development and testing easier. There really isn’t an equivalent to Boot2Docker in the EC2 space. Now all my CloudFormation stack has to do is pull and run my containers and my CloudFormation template is much cleaner as all of app-level configuration is captured in the Dockerfile.