Docker, как и любая другая технология контейнеризации (а их довольно много, и существуют они давно, например jails во FreeBSD или workload partitions в AIX), это технология создания множества
пользовательских пространств (их ещё называют userland) поверх одного экземпляра ядра.
Иными словами, у вас вроде бы запущена одна ОС и одно ядро, но при этом все ресурсы, которые предоставляет ОС, разделены на группы - что файловая система, что процессы, что сетевые интерфейсы - всё "попилено" на незавимисые группы таким образом, что процессы внутри каждой группы видят только те ресурсы, которые в этой группе находятся. Из этого следует, что хотя запущено одно ядро, каждая группа процессов видит свой "мир" - свои файлы, свой список процессов, свои сетевые подключения.
Вышеуказанные сервисы предоставляются самим ядром - т.е. ядро как раз и умеет делить СВОИ ресурсы на группы (а задача ядра ОС как раз и заключается в том, чтобы выставить пользователю такие "виртуальные" ресурсы, как ФС, процесс, TCP-подключение и т.д., обернув собой железячные ресурсы, такие как диски, сетевая карта и т.д.). Поверх этих возможностей ядра с помощью таких решений как Docker уже строится всякая инфраструктура - упаковка файловой системы в "снимок", называемый "образом", виртуальные сети между контейнерами и т.д. и т.п.
Вам важно понять базовые принципы, и не путать себя другими ответами, из того что сейчас есть только
DollyPapper написал по делу. Остальные пишут про применение, а не про смысл технологии.