использование 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
.