Docker really makes it easy to create messes by bad or less experienced developers yet ultimately have something functional, for awhile. Setting up environments used to act as a filter to clear out these sort of messy systems. If you put together a system of distributed services, you were probably competent enough to make something that wasn't horrible and considered maintainability. Now, with a few days Googling, anyone can spin up a distributed system of services with every bad practice known to man as to how those services are initialized, modified (yes, I rarely see stateless containers), and interconnected.
With a sizable team of developers that aren't under time pressures incentivized to build tech debt and pass it along, Docker (or rather container systems, not necessarily Docker) have a lot of useful purposes. I rarely see it used this way in the wild, I instead see it as a way to build tech debt. I'll take the need to resolve a couple dependencies over that any-day of the week.
I would like to see a ‘foot-gun index’ where we rank technologies and determine how likely someone is to fucking things up if not careful.
Junior engineers can make a mess with anything, it’s a senior engineers job to prevent that
I've also seen it recommended to use Ansible + Packer to provision an image, then use Terraform to create machines from the image. Saves you some troubles with connecting to your cloud machines.
Docker works for most trivial cases but for complex systems it becomes a shit show very quickly which is hard to reason about when you need to, which is whenever it is inevitably broken.
My anecdata is that horsing around with Docker was still needed and when things went wrong, they went REALLY wrong.
As with all things, figure out what you need, pick the right tool for the job, and all that good stuff.
I write my web programs in Go and there's nothing to configure once a build is complete. I just get a binary and I can ship it / deploy it anywhere.
I never found any use for Docker.