Рекомендуем, 2022

Выбор редакции

Как запустить несколько дистрибутивов одновременно с использованием контейнеров Linux

Контейнеры Linux (LXC) - это легковесная технология виртуализации, которая может использоваться по-разному. Он является частью ядра Linux и может позволить вам эмулировать один или несколько дистрибутивов Linux на одном хосте Linux. Думайте об этом как о посреднике между chroot и технологиями полной виртуализации, такими как VirtualBox, KVM или Xen. Аналогичная технология, представленная в мире BSD, - это FreeBSD Jails.

Например, машина, на которой я пишу, - это ноутбук с операционной системой Linux Mint 18, работающий на процессоре Intel Atom и имеющий 2 ГБ оперативной памяти. Тем не менее, я запускаю три Linux-контейнера, каждый с запущенным экземпляром веб-сервера Apache, без значительного снижения производительности. Это было бы немыслимо с традиционной виртуальной машиной, такой как VirtualBox. Так что, если вы хотели запустить несколько дистрибутивов в вашей системе Linux, Linux Containers должны отлично справиться с этой задачей.

Установка и настройка Linux-контейнеров

Мы настраиваем LXC на Linux Mint 18 64-bit. Приведенные здесь инструкции по установке также будут работать без изменений в Ubuntu 16.04 и выше. Если вы используете другой дистрибутив, обратитесь к официальной документации вашего дистрибутива, если что-то работает не так, как ожидалось. Также предполагается знакомство с командной строкой и общим устранением неполадок.

Предпосылки

Вот несколько вещей, которые вы должны настроить, чтобы начать использовать несколько дистрибутивов:

1. Установите LXC и другое необходимое программное обеспечение, используя:

[исходный код] sudo apt установить lxc lxc-templates uidmap [/ sourcecode]

2. Теперь вам нужно настроить свой профиль . Введите следующие команды, чтобы настроить его:

[исходный код] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; gt; ~ / .Config / LXC / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; gt; & amp; gt; ~ / .Config / LXC / default.conf
echo "lxc.network.type = veth" & amp; gt; & amp; gt; ~ / .Config / LXC / default.conf
echo "lxc.network.link = lxcbr0" & amp; gt; & amp; gt; ~ / .Config / LXC / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. Затем вам нужно настроить права пользователя следующим образом:

[исходный код] sudo usermod –add-subuids 100000-165536 $ USER
sudo usermod –add-subgids 100000-165536 $ USER

sudo cgm создать всех пользователей
sudo cgm chown для всех пользователей $ (id -u) $ (id -g)
cgm movepid для всех пользователей $$ [/ sourcecode]

Настройка вашего контейнера

Теперь, когда у вас установлен LXC Container вместе с другим необходимым программным обеспечением, выполните шаги по настройке Container:

1. В этом примере мы ubu1 контейнер Ubuntu с именем ubu1 . Для этого выполните следующую команду:

[sourcecode] lxc-create –template download –name ubu1 [/ sourcecode]

2. Здесь параметр –template указывает lxc загрузить предварительно настроенное изображение из Интернета, а параметр –name указывает имя контейнера - в данном случае ubu1 . Вы можете использовать любое имя, которое вам нравится.

3. Теперь вы увидите список поддерживаемых образов дистрибутивов :

4. Введите специфику дистрибутива, который вы хотите установить. Я установлю 64-битную версию Ubuntu 16.04 (кодовое имя xenial) здесь:

5. Если вы хотите установить образ не в интерактивном режиме, следующая команда достигает того же результата, что и выше:

[исходный код] lxc-create -t ​​загрузить -n ubu1 - –stist ubuntu –релиз xenial –arch amd64 [/ sourcecode]

6. LXC теперь загрузит и установит минимальный образ Ubuntu xenial в вашей хост-системе. Загрузка и установка могут занять некоторое время в зависимости от вашего интернет-соединения и скорости вашего ПК. После установки вы увидите такой экран:

Теперь вы готовы использовать только что настроенный контейнер Ubuntu.

Использование нескольких дистрибутивов с контейнерами Linux

Запуск Контейнера

Запустите свой контейнер с помощью команды lxc-start :

[исходный код] lxc-start -n ubu1 -d [/ исходный код]

Здесь параметр -n указывает имя контейнера, который вы хотите запустить (в данном случае ubu1 ), а параметр -d заставляет его работать в фоновом режиме .

Вы можете проверить, что контейнер запущен с помощью команды lxc-ls :

[исходный код] lxc-ls -f [/ исходный код]

Параметр -f включает необычные отчеты. Здесь вы можете видеть, что у меня есть два контейнера - один Debian (остановлен) и один Ubuntu (запущен).

Доступ и использование вашего контейнера

Вы можете получить доступ к консоли контейнера с помощью команды lxc-attach :

[исходный код] lxc-attach -n ubu1 [/ исходный код]

Теперь у вас будет корневая оболочка в вашем контейнере. Рекомендуется установить пароль для пользователя root и создать учетную запись обычного пользователя :

[Исходный код] PASSWD
adduser beebom [/ sourcecode]

Конечно, замените beebom на имя пользователя, которое вы хотите. Затем вы можете установить программное обеспечение и настроить свой контейнер так же, как в обычной системе. Например, в контейнере Debian или Ubuntu:

[sourcecode] apt установить wget openssh-сервер htop tmux nano iptables [/ sourcecode]

Остановка вашего контейнера

После того, как вы закончите играть с контейнером, либо используйте команду exit чтобы вернуться к хост-системе . Теперь используйте команду lxc-stop чтобы остановить ваш контейнер :

[исходный код] lxc-stop -n ubu1 [/ исходный код]

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

Клонирование и Снимки

Клоны

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

Например, чтобы создать клон контейнера ubu1 (назовем его ubu2 ), сначала остановите контейнер с помощью lxc-stop, а затем используйте команду lxc-copy :

[исходный код] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ sourcecode]

Здесь опция -n указывает исходный контейнер, а опция -N указывает имя клона . Чтобы убедиться, что контейнер был клонирован, используйте команду lxc-ls :

моментальные снимки

Предположим, вы собираетесь сделать некоторые потенциально опасные или сложные для восстановления после изменений в контейнере, например, перенастроить веб-сервер. Чтобы минимизировать ущерб, вы можете создать снимок контейнера перед внесением такого изменения. Если во время конфигурации что-то пойдет не так, вы можете просто остановить контейнер и восстановить его в прежнее рабочее состояние, восстановив снимок.

Чтобы создать снимок, сначала остановите контейнер :

[исходный код] lxc-stop -n ubu1 [/ исходный код]

Затем создайте снимок с помощью команды lxc-snapshot :

[исходный код] lxc-снимок -n ubu1 [/ исходный код]

Это создает снимок с именем snap0 . Любые последующие снимки, созданные с помощью этой команды, будут называться snap1, snap2 и т. Д.

После этого вы можете запустить контейнер и внести необходимые изменения. Если в любой момент вы захотите вернуться к созданному снимку, остановите контейнер и используйте команду lxc-snapshot с параметром -r для восстановления снимка :

[sourcecode] lxc-snapshot -r snap0 -n ubu1 [/ sourcecode]

Это восстановит снимок snap0 в контейнер ubu1 .

Автозапуск контейнеров при загрузке

Вы можете создать контейнер, например, контейнер веб-сервера, который будет запускаться автоматически при загрузке системы. Для этого перейдите в файл конфигурации контейнера, расположенный в $HOME/.local/share/lxc//config, и добавьте следующие строки :

[sourcecode] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

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

Поиск проблемы

Если у вас возникают проблемы с запуском контейнеров, первым делом попробуйте запустить команду lxc-start в режиме lxc-start . Например:

[исходный код] lxc-start -n ubu1 -F [/ исходный код]

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

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

Если вы попытаетесь запустить несколько контейнеров одновременно, вы можете увидеть такие ошибки, как «квота достигнута» или «не удалось создать настроенную сеть». Это потому, что вы используете больше сетевых интерфейсов, чем выделено вам. Вы можете увеличить количество сетевых мостов, которые может запустить пользователь, изменив файл /etc/lxc/lxc-usernet как root . Это может выглядеть примерно так:

[исходный код] # USERNAME TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ sourcecode]

Вы можете изменить число в конце (5 в этом примере) на большее число, например 10. Это позволит вам запускать до 10 контейнеров одновременно.

Другие виды использования Linux-контейнеров

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

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

Запуск нескольких дистрибутивов одновременно с контейнерами Linux

На этом заканчивается наш How-To по запуску нескольких дистрибутивов Linux на одном компьютере без дополнительных затрат на полноразмерную виртуальную машину. Полезность этой технологии ограничена только вашим творческим потенциалом, поэтому не стесняйтесь экспериментировать и находить новые варианты использования. Если у вас возникли проблемы с настройкой контейнеров, не стесняйтесь задавать нам вопросы в разделе комментариев.

Top