There is actually a similar collection of wrappers called LXContainers or something like that (I forget the exact name off the top of my head). Docker was the one that got all the hype and became popular, though.
You’re right that all this functionality was there before Docker existed. As I said, you could set things up manually if you wanted. Docker just wraps up a lot of the manual procedures in a nice command-line UI with packages, etc.
As for as what happens when Docker fails? What do you mean by “fail”? Docker is just a UI for setting up stuff that’s already built in to Linux for the most part, so if it fails, you could probably just go to the manual procedures to clean up the mess at worst. Now your Docker containers could fail, but that would be akin to an application failing and would be resolved using similar procedures. The only other real failures involve the Linux (or other operating system) under the covers failing, so you’re back to rebooting and calling a Linux expert, if needed.
Docker’s main security issue is that security between the containers isn’t yet as robust as it should be, so it’s possible to break out of one container to cause issues with other containers or the base operating system. As far as robustness, it’s probably about as robust as Linux itself is. It’s all done in user-space, after all.