использование machinectl в качестве диспетчера контейнеров в локальной сети

У меня есть множество контейнеров, которые я хотел бы развернуть на хосте, и чтобы они немедленно получали IP-адрес от моего DHCP-сервера, как это делают мои голые металлические устройства (телефон, ноутбук, NAS и т. Д.)

Я хотел бы иметь возможность уничтожать эти контейнеры по своему желанию, не оставив много мусора (мосты, VLANS и т. Д.) В моей хост-системе.

какие простые spinup.sh а также teardown.shкоманды, которые я мог бы использовать в этом рабочем процессе? Или, может быть, все можно аккуратно уместить в/etc/systemd/nspawn/container-x.nspawn?

Примечание: я специально ищу решение, отличное от докеров. То, что зависит только от systemd

1 ответ

Создание сети на самом деле удивительно просто. По умолчанию (по крайней мере, в тех версиях, которые я использовал) контейнер будет использовать сетевые интерфейсы хоста. Есть много способов сделать это, но следующий рецепт настройки контейнера для запуска клиента VNC (только на консольном хосте) должен обеспечить хорошую основу для дальнейших экспериментов:

Хосту потребуются следующие пакеты для установки:debootstrap,systemd-container,sway, (xwaylandтребуется только потому, чтоtigervnc-viewerне является родным приложением Wayland).

Чтобы создать контейнер:

      debootstrap --force-check-gpg --include=systemd-container,dbus,tigervnc-viewer bookworm /var/lib/machines/vncviewer/ https://deb.debian.org/debian

Затем установите контейнер. Получите приглашение root с помощью:

      systemd-nspawn -D /var/lib/machines/vncviewer/

Затем добавьте пользователя без полномочий root (например, «theuser»):

      adduser theuser

Наконец, включите базовую сеть в контейнере и выйдите из него:

      systemctl enable systemd-networkd
exit

Требуется некоторая конфигурация для контейнера. Создайте файл с таким содержимым:

      [Exec]
Environment=DISPLAY=:0

Чтобы запустить контейнер:

      systemd-nspawn -D /var/lib/machines/vncviewer/ --user=theuser vncviewer <IP address of a VNC server>

Чтобы остановить это, вы можете либо убитьsystemd-nspawnпроцесс, или (IIRC)machinectl poweroff vncviewer

Чтобы полностью удалить его, вы можете просто удалить/var/lib/machines/vncviewerи/etc/systemd/nspawn/vncviewer.nspawn.

Другие вопросы по тегам