Разве виртуальная машина не является типом процесса? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь понять основные c концепции Docker, и многие документы говорят, что "Docker - это не виртуальная машина, а процесс". Для меня это предложение выглядит довольно неловко, поскольку, насколько я знаю, виртуальная машина сама по себе также работает на хосте os, что делает ее «процессом».

Есть ли большая разница между работой виртуальной машины и другими обычными приложениями / процессами?

1 Ответ

1 голос
/ 07 апреля 2020

Docker является торговой маркой системы программного обеспечения для управления контейнерами. TL; DR:

  1. Контейнеры - это концепция упаковки.
  2. Виртуальные машины - это концепция совместимости.
  3. Виртуальные машины - это концепция безопасности.

Контейнер - это не процесс, а изоляция набора процессов в образе единой системы. Что изолированно? Прежде всего, пространство имен путей . Процессы в данном контейнере совместно используют пространство имен путей , поэтому они согласны с тем, что / usr / bin / env - это одно и то же. Два процесса в разных контейнерах или, возможно, внутри незагрязненной среды не обязательно будут видеть один и тот же файл для / usr / bin / env. Эта функция была функцией UNIX производных систем в течение как минимум 40 лет; в службе ch root () .

В последнее время контейнеры стали изолировать вещи, которые не находятся в пространстве имен, такие как процессы, идентификаторы пользователей и сетевые интерфейсы. В старых системах на основе ch root запуск ps в контейнере показал бы процессы, которых не было в этом контейнере; хотя специальная обработка была взломана, чтобы предотвратить получение пользователем root root доступа к базовой системе root.

В этих современных системах не только раздел pid разделен, но также идентификаторы пользователей , так что root в контейнере не соответствует root в общей системе.

Все это достигается путем управления многими функциями ядра в одном -системы-изображение. Программное обеспечение, которое управляет этими функциями: Docker, среди прочих.

Виртуальная машина не является частью образа одной системы. Каждая виртуальная машина - это собственный логический компьютер, на котором работает собственное ядро, оболочка и т. Д. c. При некоторой тщательной настройке вы можете сделать так, чтобы различные файлы появлялись во многих виртуальных машинах; но это ничем не отличается от монтирования файловых систем, экспортируемых сетевой файловой системой.

Зачем выбирать один из другого: контейнеры разделяют мою ОС и удобны для выхода из ада .so verionitis вызванные конфликтующими программными системами; Я могу упаковать свое программное обеспечение в контейнер, и оно изолировано от работающей системы. Я не могу, однако, упаковать ядро, в котором я нуждаюсь; так что, если мое программное обеспечение требует Ubuntu 14.02; и я бегу 18.04, контейнеры меня не спасут. Контейнеры - это концепция упаковки.

Виртуальные машины удобны для поддержки нескольких версий или типов операционных систем на одном компьютере. Поскольку каждая виртуальная машина работает с уникальным системным программным обеспечением, я могу запустить свое приложение 14.02 в своей системе 18.04, и ни одна из них не является мудрой. Виртуальные машины представляют собой концепцию совместимости.

Виртуальные машины также удобны в качестве уровня безопасности. Представьте, что на веб-странице есть js -бомба, которая может повредить мое ядро ​​(я знаю, довольно натянуто). Если я запускаю браузер в контейнере, я повредил ядро. Если я запустил его в ВМ, я повредил это ядро ​​ВМ - мне просто нужно удалить его или перемотать, и повреждение исчезло. ВМ - это концепция безопасности.

...