I think of Docker as a well executed and well-timed formalization of existing tools. It put a name to a collection of engineering concepts. This is why people can build Docker in N lines of shell script. Jails existed in the late 90s. IaC had multiple options before Docker.