Введение в контейнеры LXD Ubuntu

Контейнеры полезны по многим причинам. Они изолируют приложения от остальной системы. Они портативны и легко клонируются и/или перемещаются на другие операционные системы. А в случае с Linux они работают одинаково под любой дистрибуцией, без необходимости адаптации. Если вам нужно переместить контейнер с RedHat на Ubuntu, это должно быть просто операция копирования.
Docker — популярное решение, предназначенное для размещения одного приложения: например, сервера базы данных MySQL. LXD в чем-то похож, но предназначен для размещения целой операционной системы. Это делает его полезным в некоторых сценариях. Например, вы можете создать контейнер LXD, установить сервер базы данных и http-сервер. Затем вы можете создать сайт WordPress внутри. Вы можете переключаться между облаками, просто перемещая этот контейнер LXD, где это необходимо, когда вам не нравится ваш предыдущий провайдер. И так как контейнер легко клонировать, вы даже можете загрузить свой сайт к нескольким облачным провайдерам, чтобы создать избыточную, высокодоступную структуру.
LXD не виртуализирует оборудование, как это делает QEMU или VirtualBox, что означает, что он очень быстрый, предлагая скорость выполнения, близкую к нативной.
Установка и настройка LXD
Откройте терминал и установите LXD, а также утилиты ZFS, которые помогут вам ускорить некоторые операции и сэкономить место на диске при работе с контейнерами.
sudo apt install zfsutils-linux lxd
Начните настройку LXD.
sudo lxd initНажмите ENTER, чтобы выбрать значения по умолчанию.
Для Size in GB of the new loop device (1GB минимум) [по умолчанию=15GB] вы можете выбрать другое значение, например “50GB”, если знаете, что создадите много контейнеров.

Поиск и запуск образа дистрибутива LXD
Чтобы перечислить все образы Ubuntu:
lxc image list ubuntu: arch=amd64
Результатов будет много. Вы можете не указывать arch=amd64, если вам нужны образы для других платформ, таких как процессоры ARM (устройства Raspberry Pi используют такую архитектуру).
На предыдущем рисунке результаты были ограничены (с помощью |head), чтобы упростить чтение. Отпечаток Ubuntu 18.04 (84a71299044b) был выделен. Если вы хотите запустить контейнер с этим дистрибутивом, команда будет:
lxc launch ubuntu:84a71299044bНа данный момент это вызовет ошибку отказа в доступе. Вам нужно быть в группе “lxd”. Ваш пользователь уже добавлен в эту группу, но чтобы сделать это активным, вам нужно выйти и войти снова. Если вы хотите избежать этого, используйте эту команду, заменив “user” на ваше имя пользователя:
execsu - user
Теперь команды lxc работают без необходимости использовать sudo.
Запуск контейнеров LXD с дистрибуциями, отличными от Ubuntu
Эта команда покажет, какие другие дистрибуции доступны:
lxc image list images: arch=amd64Чтобы запустить образ, вместо отпечатка вы также можете использовать имя алиаса, если видите одно в этом списке.
lxc launch images:debian/9
Если вы добавите строку в конце, вы сможете выбрать имя для вашего контейнера:
lxc launch images:debian/9 wordpress-siteУправление контейнерами LXD
Чтобы перечислить все контейнеры:
lxc list
Столбец “IPV4” особенно важен, если на этом экземпляре есть работающие службы. Например, если на экземпляре работает сервер Apache http, введение “10.234.232.246” в браузере отобразит сайт, размещенный в контейнере.
Чтобы остановить контейнер:
lxc stop name_of_containerЭто может занять очень много времени (или не сработать) с дистрибуциями, отличными от Ubuntu. Лучше получить оболочку в контейнер, и, оказавшись внутри, введите systemctl poweroff, чтобы остановить его.
Если все остальные варианты не сработают, вы можете принудительно остановить с помощью:
lxc stop name_of_container --forceЧтобы запустить его:
lxc start name_of_containerЧтобы переместиться внутрь вашего контейнера:
lxc shell name_of_container
Вы можете устанавливать программы с помощью “sudo apt install” и делать все, что вы делали бы на обычной дистрибуции Linux, например, настраивать сервер Apache. Когда вы хотите выйти из контейнера, просто введите:
exitПередача файлов в/из контейнеров LXD
Чтобы загрузить файл в ваш контейнер:
lxc file push /path/to/local/file name_of_container/path/to/uploaded/fileУкажите имя файла, который будет создан, а не только каталог, в который вы хотите его загрузить. Вот пример:
lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.pngЧтобы загрузить каталог вместо файла:
lxc file push /path/to/local/directory name_of_container/path/to/remote/directory --recursive--verboseПример:
lxc file push /bin accurate-colt/tmp --recursive--verboseЧтобы скачать каталог из вашего контейнера на вашу основную операционную систему:
lxc file pull name_of_container/path/to/remote/directory /path/to/local/directory --recursive--verboseПример:
lxc file pull accurate-colt/tmp /tmp --recursive--verboseЗаключение
Это охватывает базовое использование контейнеров LXD. Есть более продвинутые функции, такие как снимки и откаты, ограничение ресурсов, таких как ЦПУ и ОЗУ, клонирование контейнеров и т.д. Эти функции могут быть рассмотрены в будущем уроке, если мы заметим, что читателям интересна эта тема.