2015-09-03 2 views
1

According | to | countless | sources, Docker обеспечивает сверхлегкую виртуализацию путем совместного использования системных ресурсов через контейнеры вместо распределения копий этих ресурсов на контейнер.Доккер дает RAM дополнительный пробег?

Я даже читать статьи, где он хвастался, что вы могли бы «запускать десятки, даже сотни контейнеров на одной и той же виртуальной машины.»

Но если мое приложение требует 2 ГБ оперативной памяти для запуска, а также лежащие в основе на физическом компьютере имеется только 8 ГБ ОЗУ, я бы обычно мог запускать на нем 3 экземпляра моего приложения (оставляя ~ 2 ГБ для системной памяти, утилит и т. д.).

ли Docker сделать какое-то магию с оперативной памятью, что позволяет мне на самом деле перспективе десятки контейнеров, каждый из которых выделяется 2 Гб оперативной памяти, но как-то обмен неиспользуемой памяти под капотом?

Или эти заявления больше обманывают в СМИ, чем что-либо еще?

ответ

1

Когда люди говорят о беге «десятки или сотни контейнеров» они обычно думают о микросервисах; которые выполняют определенную задачу. Каждое из них может иметь использование памяти, измеренное в КБ, а не в МБ, и, возможно, не в ГБ, и поэтому нет причин, по которым приличная машина не могла бы работать десятками или сотнями.

На самом деле существует competition (я думаю, что это происходит), чтобы получить как можно больше контейнеров на малиновой пи. Результат в настоящее время составляет более тысячи, но, по общему признанию, эти контейнеры не будут работать в реальном времени.

Что касается памяти, ответ «это сложно». Если вы используете драйвер AUFS или Overlay, контейнеры с одним и тем же базовым изображением должны иметь возможность обмениваться «страницами памяти»; что означает, что разделяемые библиотеки не должны загружаться дважды для двух контейнеров. Однако это не что-то особенное; обычные процессы, выполняемые на хосте, будут работать одинаково.

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

0

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

0

Альтернативой будет виртуальная машина. Каждая виртуальная машина, которую вы запускаете, должна запускать полный Linux-сервер, а хост-система будет хранить кусок памяти в сторону виртуализованной среды. Это означает, что вы действительно можете запускать только несколько виртуальных машин на всех, кроме самого тяжелого оборудования.

Контейнер НЕ запускает ядро ​​- он запускает только один процесс (плюс подпроцессы). Это означает, что вы можете запускать столько процессов в контейнерах, сколько сможете, если бы вы запускали те же самые процессы без контейнеров - каждый думает, что он работает на отдельной машине, но все они просто отображаются как процессы на ядре хоста.

Нет никакой магии, которая позволит вам использовать RAM в десятки раз.Но вы можете упаковывать меньшие процессы вместе LOT более жесткими, чем вы могли бы использовать виртуальные машины для разделения.

Смежные вопросы