Virtual MACHINES
  • VMWARE
  •   ESXi
  •     Инсталиране на ESXi
  •     Управление на ESXi
  •     Инсталиране на OS върху VM
  •     Експортиране на VM
  • KVM
  •     Инсталиране на KVM
  • ProxMox
  •     Инсталиране на ProxMox върху Debian
  •     Инсталиране на ProxMox от ISO
  •     Първоначални настройки на ProxMox
  •     Допълнителни настройки на ProxMox
  •     Допълнителен диск в ProxMox
  •     Създаване на ВИРТУАЛНА МАШИНА
  •     Създаване на КОНТЕЙНЕР
  •     NextCloud върху ProxMox
  •     ownCloud в контейнер
  •       HTTP към HTTPS
  •       HTTPS към друк компютър
  •     Файлов сървър върху ProxMox
  •     Резервно копиране и възстановяване в ProxMox
  •     Външна памет в ProxMox
  •     Прехвърляне на физически хардуер във VM
  • КОНТЕЙНЕРИ DOCKER
  •     Запознаване с Docker
  •       Инсталиране на Docker върху Windows
  •       Инсталиране на Docker върху Linux
  •     NGINX, PHP, MySQL чрез Docker
  •       NGINX и PHP чрез Docker
  •       NGINX, PHP, MySQL и MySQLAdmin
  •       LEMP и Docker compose
  •     ownCloud чрез Docker имидж
  •     ownCloud чрез Docker-compose
  •     Пощенски сървър Mailcow и Docker
  •     RustDESK чрез Docker
  • КОНТЕЙНЕРИ LXC
  •     Запознаване с LXC
  •         LXD Debian
  •             LXD Debian BackUP/Restore
  • Запознаване с Линукс контейнери

    Инсталация на LXC и LXD

    LXC (Linux Containers) е лек контейнер за една уеб услуга или сайт, включително всички услуги, които са необходими за функционирането му. Представлява затворена среда за работа ползваща ядрото на самата ОС. Има набор от прости инструменти за работа. LXC изисква ръчна конфигурация и е по-сложен за управление. LXD (Linux Daemon) това е разширение, което се използва главно за управление на LXC. Използва се за предоставяне на нови атрибути и възможности на LXC, така че LXC да може да се използва по-ефективно. Комуникацията между LXD и LXC се осъществява с помощта на вградени библиотеки, една от тях е liblxc. LXD предлага интуитивен интерфейс с една команда (lxc), който автоматизира мрежи, съхранение и изображения. LXD добавя възможности, които липсват в чистия LXC, като live migration (преместване на работещ контейнер между сървъри), snapshots (моментни снимки) и поддръжка за виртуални машини. Докато LXC е предназначен за работа на една машина, LXD поддържа клъстеризация и може да се интегрира с инструменти като OpenStack. LXCFS - малка файлова архитектура в потребителската среда, която оптимизира работата на Linux ядрото. В какви случаи е удобно да използвате LXC ("контейнери"): ● Наследство: вече имате уеб услуга/сайт, хостван на специален сървър и трябва да го пакетирате под формата на контейнер, който може да бъде предоставен на разработчиците или прехвърлен на друг сървър (резервен или етап); ● Обичате да работите в среда, в която всички услуги са събрани в един контейнер; ● Нуждаем се от изолация на сървъра, така че всяка уеб услуга да е в свой собствен контейнер, но без да губи производителност, какъвто е случаят с виртуалните машини; ● Ако знаете как да конфигурирате основни услуги в Linux, тогава можете да създадете LXC контейнер за вашия проект. LXC е много подобен на обикновена виртуална машина. Благодарение на LXD можем да създаваме не само контейнери но и виртуални машини заедно с QEMU. Има още и LXFS. Това е особена файлова система осигуряващ по-голяма независимост на контейнера.

    Инсталация върху Debian от репозитори

    За начало да проверим версията на Linux с която работим.

    uname -a Linux lxc-lxd 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux cat /etc/*release PRETTY_NAME="Debian GNU/Linux 12 (bookworm)" NAME="Debian GNU/Linux" VERSION_ID="12" VERSION="12 (bookworm)" VERSION_CODENAME=bookworm ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"

    И самата инсталация.

    apt update -y apt upgrade -y apt install lxd -y ### Долните пакети са ако ползвате контейнери с LXC, а не с LXD (Не са задължителни) apt install -y lxc lxc-templates bridge-utils libvirt-clients libvirt-daemon-system

    lxc - Основният пакет за контейнеризация, по-принцип се инсталира по време на инсталацията на lxd. lxc-templates - Шаблони за създаване на различни дистрибуции (напр. Debian, Ubuntu, Alpine). bridge-utils - За управление на мрежови мостове (bridge). libvirt-clients - Съдържа основните инструменти от командния ред за управление на виртуализацията чрез библиотеката libvirt. libvirt-daemon-system - Mетапакет, който съдържа необходимите конфигурационни файлове за стартиране на libvirt като системен демон (service).

    Инициализация на LXD

    По време на първия старт трябва да инициализираме самия процес на LXD

    lxd init Would you like to use LXD clustering? (yes/no) [default=no]: no ### Ще ползваме ли няколко услуги LXD в клъстер. За сега не. Do you want to configure a new storage pool? (yes/no) [default=yes]: yes ### Ще ползваме ли пул за данни (ДА) Name of the new storage pool [default=default]: mypool ### Име на пула. Даваме му име (mypool) Would you like to connect to a MAAS server? (yes/no) [default=no]: no ### Metal As A Server - софтуер, който кара сървъра да изглежда и действа като виртуална машина. Казваме, че няма да ползваме. Would you like to create a new local network bridge? (yes/no) [default=yes]: ### Ще създаваме ли бридж с мрежовия интерфейс. По подразбиране е да, просто натискаме Enter. What should the new bridge be called? [default=lxdbr0]: ### Даваме име на бридж интерфейса. Името по подразбиране ни устройва, просто натискаме Enter. What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ### Ще ползваме динамично IPv4. Просто натискаме Enter. What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ### Ще ползваме динамично IPv6. Просто натискаме Enter. Would you like the LXD server to be available over the network? (yes/no) [default=no]: yes ### Искаме ли нашите контейнери да са достъпни от външни мрежи. В случая искаме. Address to bind LXD to (not including port) [default=all]: ### Адрес на който да се прилепи контейнера. Просто натискаме Enter. Port to bind LXD to [default=8443]: ### Порт по подразбиране на контейнера. Просто натискаме Enter. Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: ### Автоматично да се обновява образа на контейнера. Съгласяваме се и натискаме Enter. Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: yes ### Предлага да погледнем конфигурацията която създадохме във формат YAML. Съгласяваме се с "yes".

    Проверяваме дали демона е стартиран.

    service lxd status lxd.service - LXD Container Hypervisor Loaded: loaded (/lib/systemd/system/lxd.service; indirect; preset: enabled) Active: active (running) since Thu 2024-06-20 12:06:29 EDT; 43min ago TriggeredBy: lxd.socket Docs: man:lxd(1) Process: 1702 ExecStartPre=/usr/libexec/lxd/lxd-apparmor-load (code=exited, status=0/SUCCESS) Process: 1711 ExecStartPost=/usr/bin/lxd waitready --timeout=600 (code=exited, status=0/SUCCESS) Main PID: 1710 (lxd) Tasks: 18 Memory: 52.0M CPU: 965ms CGroup: /system.slice/lxd.service ├─1710 /usr/bin/lxd --group lxd --logfile=/var/log/lxd/lxd.log └─1801 dnsmasq --keep-in-foreground --strict-order --bind-interfaces --except-interface=lo --pid-file= --no-ping --interface=lxdbr0> Jun 20 12:36:51 lxc-lxd dnsmasq-dhcp[1801]: DHCPv4-derived IPv6 names on fd42:f020:5d49:8e26::, constructed for lxdbr0 Jun 20 12:36:51 lxc-lxd dnsmasq-dhcp[1801]: router advertisement on fd42:f020:5d49:8e26::, constructed for lxdbr0 Jun 20 12:36:51 lxc-lxd dnsmasq-dhcp[1801]: IPv6 router advertisement enabled Jun 20 12:36:51 lxc-lxd dnsmasq-dhcp[1801]: DHCP, sockets bound exclusively to interface lxdbr0 Jun 20 12:36:51 lxc-lxd dnsmasq[1801]: using only locally-known addresses for lxd Jun 20 12:36:51 lxc-lxd dnsmasq[1801]: reading /etc/resolv.conf Jun 20 12:36:51 lxc-lxd dnsmasq[1801]: using nameserver 8.8.8.8#53 Jun 20 12:36:51 lxc-lxd dnsmasq[1801]: using nameserver 1.1.1.1#53 Jun 20 12:36:51 lxc-lxd dnsmasq[1801]: using only locally-known addresses for lxd Jun 20 12:36:51 lxc-lxd dnsmasq[1801]: read /etc/hosts - 7 names

    Проверка на конфигурацията на ядрото

    lxc-checkconfig LXC version 6.0.4 Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-6.12.63+deb13-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Namespace limits: cgroup: 31287 ipc: 31287 mnt: 31287 net: 31287 pid: 31287 time: 31287 user: 31287 uts: 31287 --- Control groups --- Cgroups: enabled Cgroup namespace: enabled Cgroup v1 mount points: Cgroup v2 mount points: - /sys/fs/cgroup Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled, not loaded Macvlan: enabled, not loaded Vlan: enabled, loaded Bridges: enabled, loaded Advanced netfilter: enabled, loaded CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, not loaded CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded FUSE (for use with lxcfs): enabled, not loaded --- Checkpoint/Restore --- checkpoint restore: enabled CONFIG_FHANDLE: enabled CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled CONFIG_UNIX_DIAG: enabled CONFIG_INET_DIAG: enabled CONFIG_PACKET_DIAG: enabled CONFIG_NETLINK_DIAG: enabled File capabilities: enabled Note: Before booting a new kernel, you can check its configuration with: CONFIG=/path/to/config /usr/bin/lxc-checkconfig

    Уверете се, че ядрото на вашия Debian поддържа всички нужни функции за LXC, всички важни опции трябва да са в зелено (enabled).

    Настройка на мрежата (lxc-net)

    За да имат контейнерите достъп до интернет, трябва да активирате автоматичния мрежов мост lxcbr0:

    nano /etc/default/lxc-net USE_LXC_BRIDGE="true"

    Реда който е показан в зелено трябва да съществува. Услугата я стартираме и разрешаваме.

    systemctl enable --now lxc-net Synchronizing state of lxc-net.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable lxc-net

    Създаване на първия контейнер

    lxc-create -t download -n my-container ubuntu jammy amd64 default 20260202_07:42 ubuntu jammy arm64 default 20260202_07:42 ubuntu jammy armhf default 20260202_07:42 ubuntu jammy riscv64 default 20260202_08:00 ubuntu noble amd64 default 20260202_07:42 ubuntu noble arm64 default 20260202_07:42 ubuntu noble armhf default 20260202_08:03 ubuntu noble riscv64 default 20260202_08:02 ubuntu plucky amd64 default 20260202_07:42 ubuntu plucky arm64 default 20260202_07:42 ubuntu plucky armhf default 20260202_07:42 ubuntu plucky riscv64 default 20260202_07:42 ubuntu questing amd64 default 20260202_07:42 ubuntu questing arm64 default 20260202_07:42 ubuntu questing armhf default 20260202_08:08 voidlinux current amd64 default 20260201_17:10 voidlinux current arm64 default 20260201_17:10 --- Distribution: debian Release: trixie Architecture: amd64 Downloading the image index Downloading the rootfs The image cache is now ready Unpacking the rootfs --- You just created a Debian trixie amd64 (20260202_05:24) container. To enable SSH, run: apt install openssh-server No default root or user password are set by LXC.

    Създадохме контейнер, като използвате шаблона download, който ще позволи да изберем дистрибуция и версия:

    Управление на контейнера

    Стартиране

    lxc-start -n my-container -d

    -d - стартира във фонов режим

    Достъп до контейнера (конзола)

    lxc-attach -n my-container root@my-container:~# exit

    Статус на контейнерите

    lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED my-container RUNNING 0 - 10.0.3.114 fc42:5009:ba4b:5ab0:6495:9fff:fee1:4a92 false

    Спиране на контейнера

    lxc-stop -n my-container lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED my-container STOPPED 0 - - - false

    За подробна официална документация и специфични за Debian настройки, посетете LXC страницата в Debian Wiki.

    Образи в LXC и LXD

    За да не се повтарят статиите прочетете https://tlan.net/menu/linux/containers/images/images.php

    Контейнери в LXC и LXD

    За да не се повтарят статиите прочетете https://tlan.net/menu/linux/containers/containers/containers.php