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 это очень удобная «вещь». Вы собственного говоря работаете как в обычной системе, можете ставить, что угодно, при этом Вы не портите основную систему. Управление простое и понятное. Действия с вашей стороны минимальны. Спасибо, что прочитали статью, есть вопросы? пишите. Всем удачи, и мирного неба. Пока. 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *