Запускать контейнеры внутри виртуальной машины?

15

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

Моя ситуация такова, что я не могу позволить себе купить дополнительные серверы, и у меня есть все серверы, на которых установлены гипервизоры. Мне нужно предоставить как минимум 6 «серверов» для размещения экземпляров относительно небольшого веб-приложения (каждый экземпляр предназначен для отдельного клиента). Было бы бесполезно предоставлять новую ВМ для каждого из этих серверов, поэтому я планирую установить 2 ВМ и выполнить одно из следующих действий:

  1. Запустите несколько экземпляров приложения на каждой виртуальной машине, используя виртуальные хосты (apache). или
  2. Установите контейнеры на виртуальных машинах, которые позволят мне изолировать окружение.

Учитывая это, есть ли незначительные накладные расходы, связанные с контейнерными системами, которые сделали бы плохой идеей их использование внутри ВМ, или есть какая-то другая техническая причина, почему я не хотел бы использовать контейнеры?

Крис Л
источник

Ответы:

13

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

SELinux - SELinux осведомлен о контейнере и автоматически создает метку MCS со случайным именем для каждого контейнера. Это помогает обеспечить изоляцию, поскольку контейнеры LXC сами по себе не считаются «содержащими», хотя это улучшается.

Директива USER - в каждом Dockerfile рекомендуется использовать директиву USER, чтобы пользователь по умолчанию запускал учетную запись, отличную от root. Подвох здесь заключается в том, что пользователь должен существовать в системе. Это также может расстраивать файлы и каталоги, связанные с сокращением / изменением параметров, для этого нового пользователя, но это помогает снизить риск. Обычно я рекомендую вам создать «контейнерного пользователя» или что-то подобное в своих системах, чтобы гарантировать, что обычный пользователь доступен во всех системах, которые не пересекаются с какой-либо другой частью системы.

В противном случае самым сложным является управление контейнерами и их обновление при необходимости.

theterribletrivium
источник
3

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

Помогает ли вам производительность Docker Containers в VMware vSphere ?

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

Я не знаю о Docker вообще, потому что я еще не работал с ним. Я думаю, что управляющему программному обеспечению все еще не хватает зрелости по сравнению с программным обеспечением для управления виртуальными машинами ... но я администратор vSphere и поэтому, вероятно, предвзятый.

Что касается Docker на виртуальных машинах , CoreOS теперь официально поддерживается в vSphere 5.5 . Поэтому, по крайней мере, VMware считает, что Docker / контейнеры на виртуальных машинах в порядке.

Марио Ленц
источник