Docker использует решение виртуализации при работе на машинах Linux? - PullRequest
0 голосов
/ 05 мая 2019

При использовании Docker для Windows контейнеры работают бок о бок в виртуальной машине Hyper-V Linux на Windows. Итак, при запуске контейнера в Ubuntu, нужно ли какое-либо решение для виртуализации, такое как Hyper-V, или контейнеры просто работают как процессы внутри Ubuntu?

Источник для моего первого заявления - Как Docker Desktop запускает контейнеры Linux на Windows-машине

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Во-первых, почему гипер-v?

Причина, по которой докер в Windows использует виртуальную машину hyper-v, заключается в том, что для контейнера linux он должен был использовать ядро ​​linux хоста. Но в Windows у нас нет ядра Linux, поэтому Docker установил для вас виртуальную машину hyper-v, а затем разрешил вашему контейнеру разделить ядро.

Во-вторых, почему бы не виртуальная машина на Linux?

Но на linux хост уже имеет ядро ​​linux, поэтому контейнер может использовать это ядро ​​без использования виртуальной машины.

Фактически, из следующей диаграммы, которую вы можете видеть, когда вы запускаете новый контейнер, он автоматически запускает процесс containerd-shim, он запускается как процесс, который вы можете использовать ps aux | grep docker, чтобы увидеть его на хосте linux.

enter image description here

И, наконец, что такое контейнер?

Docker использует технологию, называемую пространства имен, для предоставления изолированного рабочего пространства, называемого контейнером. Когда вы запускаете контейнер, Docker создает набор пространств имен для этого контейнера, тогда каждый процесс в контейнере будет выполняться в отдельном пространстве имен. См. официальная документация .

1 голос
/ 05 мая 2019

«Контейнеры» - это концепция, которая объединяет (в основном) две функции, реализованные в ядре Linux - контрольные группы и пространства имен .Вам нужна виртуальная машина поверх Windows, потому что Windows не реализует эти две функции.

Поэтому, когда вы запускаете контейнеры native в Linux, каждый контейнер просто запускается как отдельные процессы, ограниченные контролемгруппы и пространства имен.

...