lxc — это простая технология виртуализация, которая практически не снижает производительности компьютера. Одним из преимуществ lxc возможность протестировать какой-нибудь сервис или пакет, не трогая основную систему. Создание виртуальной машине не занимает много времени, Технология управления проста и понятна. Вам даже не нужна панель управления. Подробнее об lxc можете почитать в интернете. А мы перейдем к практике.
В качестве «жертвы» выбрали древний сервер и ОС Debian 11. Установим lxc
Установка и предварительная настройка
apt install lxc libvirt-bin
Если вы хотите, чтобы LXC запускал непривилегированные контейнеры, требования к пакету немного отличаются.
apt-get install lxc libvirt0 libpam-cgfs bridge-utils uidmap
Далее необходимо отредактировать default.conf
nano /etc/lxc/default.conf
Выставляем такие параметры, вместо lxc.network.type = empty
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
Теперь настроим сеть для lxc
nano /etc/default/lxc-net
Подсеть можно указать любую, на Ваше усмотрение. Я указал подсеть по умолчанию. При данной настройке контейнер получает ip адрес автоматически.
USE_LXC_BRIDGE="true"
LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"
LXC_DHCP_CONFILE=""
LXC_DOMAIN=""
Забегая вперед можно настроить статические ip адреса, нужно только изменить LXC_DHCP_CONFILE=""
LXC_DHCP_CONFILE="/etc/lxc/dhcp.conf"
Создание контейнера
Теперь создадим новый контейнер. Создается контейнер командой lxc-create. Так же выбираем Дистрибутив, версию и архитектуру. Можно ставить все что угодно. Пример вывода.
lxc-create -t download -n base
ubuntu bionic amd64 default 20220728_07:43
ubuntu bionic arm64 default 20220727_07:43
ubuntu bionic armhf default 20220727_07:43
ubuntu bionic i386 default 20220727_07:43
ubuntu bionic ppc64el default 20220727_07:55
ubuntu bionic s390x default 20220727_07:42
ubuntu focal amd64 default 20220728_07:44
ubuntu focal arm64 default 20220727_07:43
ubuntu focal armhf default 20220727_07:42
ubuntu focal ppc64el default 20220727_07:42
ubuntu focal s390x default 20220727_07:52
ubuntu impish amd64 default 20220719_07:42
ubuntu impish arm64 default 20220719_07:43
---
Distribution:
debian
Release:
bullseye
Architecture:
amd64
Так же можно указать все параметры сразу
lxc-create -t download -n base -- --dist debian --release bullseye --arch amd64
Контейнеры в системе располагаются по адресу /var/lib/lxc/
Основные команды
lxc-start -n base - запуск контейнера
lxc-stop -n base - остановка контейнера
lxc-destroy -n base - удаление контейнера
lxc-attach -n base - подключение к контейнеру
lxc-ls -f - список контейнеров
lxc-info -n base - информация о контейнере
lxc-freeze -n base - заморозка всех процессов заданного контейнера
lxc-unfreeze -n base - разморозка всех процессов заданного контейнера
lxc-copy -n base -N base2 - копирование контейнеров -n источник -N клонированный контейнер. С начала необходимо остановить контейнер
lxc-snapshot -n base - создать снимок контейнера. С начала необходимо остановить контейнер
Дополнительные настройки
Настройка статического IP
Чтобы настроить статический ip, необходимо прописать в конфигурационном файле статический мак адрес. Для этого отредактируем файл.
nano /var/lib/lxc/base/config
#Distribution configuration
lxc.include = /usr/share/lxc/config/common.conf
lxc.arch = linux64
# Container specific configuration
lxc.apparmor.profile = generated
lxc.apparmor.allow_nesting = 1
lxc.rootfs.path = dir:/var/lib/lxc/base/rootfs
lxc.uts.name = base
# Network configuration
lxc.start.auto = 1
lxc.start.delay = 10
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = ae:df:62:da:d9:89
Прописывает статичный мак адрес. Теперь, при остановке и старте контейнера, ip меняться не будет.
Меняем IP адрес для контейнера
lxc контейнеры получаю ip адреса службой dnsmasq встроенным в lxc-net. Поэтому просто так поменять ip не получится. Для это необходимо добавить параметр в default.conf. Приводим строчку LXC_DHCP_CONFILE=»» к такому виду.
LXC_DHCP_CONFILE=»/etc/lxc/dhcp.conf»
Далее пропишем
nano /etc/lxc/dhcp.conf
dhcp-host=base,10.0.3.5
где base — имя контейнера, свой ip из настроенной подсети.
Автозапуск контейнера
Настроим возможность автозапуска контейнера при старте системы
nano /var/lib/lxc/base/config
пропишем строчки
lxc.start.auto = 1
lxc.start.delay = 10 задержка запуска контейнера, необходимо поставить, чтобы подождать пока загрузится основная ОС
Возможные проблемы
Не запускается контейнер? Попытайтесь запустить контейнер lxc с опцией -F, данная опция запустится в фоновом режиме с возможность просмотра процесса запуска контейнера и возможное появление ошибок.
lxc-start -n base -F
Итог
Контейнеры lxc это очень удобная «вещь». Вы собственного говоря работаете как в обычной системе, можете ставить, что угодно, при этом Вы не портите основную систему. Управление простое и понятное. Действия с вашей стороны минимальны. Спасибо, что прочитали статью, есть вопросы? пишите. Всем удачи, и мирного неба. Пока.