None of the things mentioned solve the problem of the sysadmin having to "design" the solution from the top down. Docker does. A Docker image is an appliance. You don't architect it; you just configure it. You don't have to care which OS it's running inside. Docker images running on Windows don't even care whether it's Windows Core or Ubuntu inside them, even. It's a black box with defined configurability-points.
The only real comparisons to Docker are
1. Amazon's AMIs (though nobody hosts a public AMI registry except for Amazon, so it's not really a good comparison);
2. Canonical's "snap" format (https://snapcraft.io)
Both of these achieve the same things that Docker achieves: developer-distributed virtual appliances configured by the sysadmin but "managed" automatically by the runtime.
And both are just as complicated as Docker. The complexity is necessary.