Введение в контейнеры 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-apt-install

Начните настройку LXD.

sudo lxd init

Нажмите ENTER, чтобы выбрать значения по умолчанию.

Для Size in GB of the new loop device (1GB минимум) [по умолчанию=15GB] вы можете выбрать другое значение, например “50GB”, если знаете, что создадите много контейнеров.

lxd-init-questions

Поиск и запуск образа дистрибутива LXD

Чтобы перечислить все образы Ubuntu:

lxc image list ubuntu: arch=amd64

lxd-ubuntu-images

Результатов будет много. Вы можете не указывать arch=amd64, если вам нужны образы для других платформ, таких как процессоры ARM (устройства Raspberry Pi используют такую архитектуру).

На предыдущем рисунке результаты были ограничены (с помощью |head), чтобы упростить чтение. Отпечаток Ubuntu 18.04 (84a71299044b) был выделен. Если вы хотите запустить контейнер с этим дистрибутивом, команда будет:

lxc launch ubuntu:84a71299044b

На данный момент это вызовет ошибку отказа в доступе. Вам нужно быть в группе “lxd”. Ваш пользователь уже добавлен в эту группу, но чтобы сделать это активным, вам нужно выйти и войти снова. Если вы хотите избежать этого, используйте эту команду, заменив “user” на ваше имя пользователя:

execsu - user

lxd-user-active-groups

Теперь команды lxc работают без необходимости использовать sudo.

Запуск контейнеров LXD с дистрибуциями, отличными от Ubuntu

Эта команда покажет, какие другие дистрибуции доступны:

lxc image list images: arch=amd64

Чтобы запустить образ, вместо отпечатка вы также можете использовать имя алиаса, если видите одно в этом списке.

lxc launch images:debian/9

lxd-launch-debian-9

Если вы добавите строку в конце, вы сможете выбрать имя для вашего контейнера:

lxc launch images:debian/9 wordpress-site

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

Чтобы перечислить все контейнеры:

lxc list

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

lxd-shell-debian

Вы можете устанавливать программы с помощью “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. Есть более продвинутые функции, такие как снимки и откаты, ограничение ресурсов, таких как ЦПУ и ОЗУ, клонирование контейнеров и т.д. Эти функции могут быть рассмотрены в будущем уроке, если мы заметим, что читателям интересна эта тема.