Can anybody give me a reason why containers are popular for production deployments (NOT referring to K8 use-cases)? As a development workflow they're amazing - but cheap cloud based VPSs + Ansible/Puppet work really nice. Why would you add another layer of abstraction in there when all it does is hinder performance?
Because you are deploying a single artifact with minimal dependencies that behaves in a known fashion.
Whereas if you are deploying code blobs they start depending on the operating system to provide stuff. You have to have the right version of Ruby on each machine. This becomes a problem when the right version varies between products and you would also like to update the OS to something new.
With containers the application code is decoupled from the operating system.
Yea I get that. To me this scenario gets mitigated with due diligence checking when spinning up a virtual machine - but I recognise the benefit in having a single artifact.
For the same reason that pallets and containers are popular in shipping even though they make less efficient use of space than breakbulk packing would. The ease of management outweighs the potential performance penalties.