Я уже рассказал как на маке пашут контейнеры, это всего лишь уровень абстракции для синхронизации, так как изначально Docker разрабатывался для линукса и только для него, повторюсь, определение виртуальной машины разрознено, тогда и JVM для Java и CLR для .Net можно считать виртуальной машиной