Во-первых, почему гипер-v?
Причина, по которой докер в Windows использует виртуальную машину hyper-v, заключается в том, что для контейнера linux он должен был использовать ядро linux хоста. Но в Windows у нас нет ядра Linux, поэтому Docker установил для вас виртуальную машину hyper-v, а затем разрешил вашему контейнеру разделить ядро.
Во-вторых, почему бы не виртуальная машина на Linux?
Но на linux хост уже имеет ядро linux, поэтому контейнер может использовать это ядро без использования виртуальной машины.
Фактически, из следующей диаграммы, которую вы можете видеть, когда вы запускаете новый контейнер, он автоматически запускает процесс containerd-shim
, он запускается как процесс, который вы можете использовать ps aux | grep docker
, чтобы увидеть его на хосте linux.
И, наконец, что такое контейнер?
Docker использует технологию, называемую пространства имен, для предоставления изолированного рабочего пространства, называемого контейнером. Когда вы запускаете контейнер, Docker создает набор пространств имен для этого контейнера, тогда каждый процесс в контейнере будет выполняться в отдельном пространстве имен. См. официальная документация .