Except, docker has the same prerequisites. That's kind of the point of this excercise, to show that docker is primarily glue between existing tools, not necessarily new technology.
Dockerfile format is essential because it allows for a single code to build container. This code could be used by docker build, docker buildkit, podman, kaniko and other tools. It's not ideal but it's good enough.
Container image format is essential because it allows for a shared ecosystem of containers. There are plenty of container registries and you can just pull any image, build your image using those other images, etc.
Basically docker introduced some standards and everyone accepted those standards. And that's a good thing. They're far from ideal, but they're kind of shared among implementations and good enough I guess.
Now with those standards you can innovate on implementations. Some people replaced docker with podman, having access to the same vast repository of containers. Some people replaced docker build with kaniko, which allows to build containers in a different way using the same source Dockerfile.
> Do you really consider this an endless stream of new JS frameworks popping up every day?
“Everyday” in the case of js frameworks has always been hyperbolic to me, but I think something that perhaps isn’t unfair is “once you’ve mastered a given framework, there’s a new one you have to learn.”
It certainly seems to be more development than in other languages. Seems. Seems. Seems. I could be wrong about that though.