|
|||||||
Ваш первый LXD контейнер
Время создания: 09.03.2020 14:51
Автор: alensav
Текстовые метки: Ваш первый LXD контейнер
Раздел: !!LXD
Запись: alensav/MyTetra2/main/base/1583754705u2cm7y56tl/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
LXD 2.0: Ваш первый LXD контейнер [3/12]. Третья статья из цикла статей про LXD от Стефана Грабера (Stéphane Graber). Научимся создавать и манипулировать своим первым контейнером. Так как существует много команд для управления контейнерами LXD, то данный пост будет большим. Если вы предпочитаете быстрый тур "шаг за шагом", то лучше попробовать онлайн тур . Создание и запуск нового контейнера Как было указано в предыдущих статьях, клиент командной строки идёт с преднастроенными источниками образов (image). Официальные Ubuntu образы всех релизов и архитектур присутствуют там, но так же есть неофициальные образы других дистрибутивов. Их создаёт сообщество и поддерживаются мантейнерами upstream проекта. Ubuntu Если вы просто хотите поддерживаемый релиз Убунту, то командуйте lxc launch ubuntu: Заметьте, что при выходе новых релизов смысл вашей команды будет меняться. При использовании команды в сценариях вы будете ставить актуальный релиз. Ubuntu 14.04 LTS Чтобы получить последний, протестированный, стабильный образ Ubuntu 14.04 Trusty Tahr LTS, вам нужно - lxc launch ubuntu:14.04 Данная команда даст случайное имя контейнеру. Если хотите сами его задать (в примере c1), тогда командуйте так lxc launch ubuntu:14.04 c1 Текущий разрабатываемый релиз Убунту Использование "ubuntu:" подразумевает только работу с официальными, протестированными образами Убунту. Если вы хотите работать с непротестированными, дневными билдами, используйте "ubuntu-daily:" - lxc launch ubuntu-daily:devel c3 Последний Alpine Linux Образы Alpine доступны через "images:" - lxc launch images:alpine/3.3/amd64 c5 И много ещё ... Полные списки доступных образов Убунту вы получите Список алиасов (дружественных имён) вы можете получить так (в примере для удалённого ubuntu:) - lxc image alias list ubuntu: Создание контейнера без его запуска Если вы хотите просто создать контейнер или пачку контейнеров, но не хотите их запускать немедленно, то замените lxc launch на lxc init. Всё остальное идентично, за исключением того, что контейнер не стартует после создания. lxc init ubuntu: Информация о контейнерах Список всех контейнеров Список всех ваших контейнеров - lxc list Есть различные опции, которыми вы можете определить отображаемые столбцы. В системах с большим количеством контейнеров вывод информации с дефолтными столбцами может быть медленным из-за получения информации о сети внутри контейнера. Вы можете вывести так - lxc list --fast , что потребует меньше обработки на стороне сервера. Вы можете фильтровать по имени или свойствам. Для примера выведем привилегированные контейнеры - lxc list security.privileged=true +------+---------+---------------------+-----------------------------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+---------------------+-----------------------------------------------+------------+-----------+
| suse | RUNNING | 172.17.0.105 (eth0) | 2607:f2c0:f00f:2700:216:3eff:fef2:aff4 (eth0) | PERSISTENT | 0 |
+------+---------+---------------------+-----------------------------------------------+------------+-----------+
Для примера выведем контейнеры, обладающие в имени подстрокой alpine. Поддерживаются сложные регулярные выражения. +-------------+---------+--------------+----------------------+----------+------------+
| NAME | STATE | ARCHITECTURE | CREATED AT | PROFILES | TYPE |
+-------------+---------+--------------+----------------------+----------+------------+
| alpine | RUNNING | x86_64 | 2016/03/20 02:11 UTC | default | PERSISTENT |
+-------------+---------+--------------+----------------------+----------+------------+
| alpine-edge | RUNNING | x86_64 | 2016/03/20 02:19 UTC | default | PERSISTENT |
+-------------+---------+--------------+----------------------+----------+------------+
Получение детальной информации о контейнере Команда list не может показать детальную информацию про конкретный контейнер в читабельном виде. Запросить требуемое про контейнер вы можете - lxc info имя-контейнера Name: zerotier
Architecture: x86_64
Created: 2016/02/20 20:01 UTC
Status: Running
Type: persistent
Profiles: default
Pid: 31715
Processes: 32
Ips:
eth0: inet 172.17.0.101
eth0: inet6 2607:f2c0:f00f:2700:216:3eff:feec:65a8
eth0: inet6 fe80::216:3eff:feec:65a8
lo: inet 127.0.0.1
lo: inet6 ::1
lxcbr0: inet 10.0.3.1
lxcbr0: inet6 fe80::c0a4:ceff:fe52:4d51
zt0: inet 29.17.181.59
zt0: inet6 fd80:56c2:e21c:0:199:9379:e711:b3e1
zt0: inet6 fe80::79:e7ff:fe0d:5123
Snapshots:
zerotier/blah (taken at 2016/03/08 23:55 UTC) (stateless)
Команды управления жизненным циклом Команды очевидны для большинства известных вам менеджеров виртуальных машин и контейнеров, но они будут описаны. Команды принимают множество имён контейнеров для пакетной обработки.
Конфигурация контейнера LXD управляет множеством настроек контейнера, включая ограничения ресурсов, контроль старта контейнера и параметры проброса устройства из хоста в контейнер. Полный список очень большой и доступен в разделе Configuration . Что касается устройств, LXD поддерживает следующие типы:
Профили конфигурации Список доступных профилей можно получить командой lxc profile list Локальная конфигурация Для уникальных опций конкретного контейнера нет смысла указывать это в профиле и можно установить значения данных опций напрямую: Всё тоже самое доступно и для профилей - lxc profile set ... и lxc profile device add ... Чтение конфигурации Вы можете отобразить локальную конфигурацию name: zerotier
profiles:
- default
config:
security.nesting: "true"
user.a: b
volatile.base_image: a49d26ce5808075f5175bf31f5cb90561f5023dcd408da8ac5e834096d46b2d8
volatile.eth0.hwaddr: 00:16:3e:ec:65:a8
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":65536},
{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":65536}]'
devices:
eth0:
name: eth0
nictype: macvlan
parent: eth0
type: nic
limits.ingress: 10Mbit
limits.egress: 10Mbit
root:
path: /
size: 30GB
type: disk
tun:
path: /dev/net/tun
type: unix-char
ephemeral: false
Команда полезна для проверки, что на самом деле в итоге будет применено к данному контейнеру. Обновление конфигурации в реальном времени Обратите внимание, что все конфигурационные параметры и устройства могут быть применены к контейнеру "на лету". Вы можете добавлять или удалять устройства, изменять профиля безопасности БЕЗ необходимости перезагружать контейнер. Получение shell LXD позволяет выполнять задачи напрямую в контейнере. Наиболее частая задача - запуск shell для административной работы. Преимущество перед SSH состоит в том, что вы не зависите от сетевых настроек или наличия/отсутствия определенных программ. Среда исполнения Вам следует знать, что хоть LXD и выполняет ваши команды внутри контейнера, сам он не работает внутри контейнера, а следовательно не знает какую оболочку использовать, какие переменные окружения есть и какой путь к домашней директории. Команды, исполняемые через LXD, работают от прав root внутри контейнера (uid 0, gid 0) с минимальным PATH и HOME = /root. Дополнительные переменные окружения могут быть переданы через командную строку или выставлены на всегда через указание в конфигурации ключей environment.ключ. Выполнение команд Запуск оболочки внутри контейнера просто - lxc exec имя-контейнера bash , подразумевая что контейнер обладает установленным bash. Более сложные команды требуют использования разделителя для корректного парсинга lxc exec имя-контейнера -- ls -lh / Управление файлами Так как LXD имеет прямой доступ к файловой системе контейнера, вы можете читать и писать любой файл внутри. Взятие файла из контейнера Получить файл из контейнера можно командой - lxc file pull имя-контейнера/путь место-назначения-dest 127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Помещение файла внутрь контейнера lxc file push исходное-местоположение имя-контейнера/путь Редактирование файла Удобная функция, которая сама возьмёт (pull) файл, откроет его в вашем редакторе и затем поместит (push) его обратно с вашими правками: lxc file edit имя-контейнера/путь Управление снимками LXD позволяет сделать снимок и затем восстановить его. Снимки включают полное состояние контейнера, включая running состояние при использовании -stateful, что означает сохранение конфигурации контейнера, устройств и файловой системы. Создание снимка Просто создать снимок можно так lxc snapshot имя-контейнера и снимки будут иметь имя snapX, где X - увеличивающееся число. Сделать снимок с именем можно так - lxc snapshot имя-контейнера имя-снимка Списки снимков. Сколько всего снимков у контейнера показывается в команде lxc list, но фактически список снимков вы увидите в выводе lxc info имя-контейнера Восстановление из снимка Восстановить состояние контейнера на момент снимка - lxc restore имя-контейнера имя-снимка Переименование снимка Снимок переименовывается методом перемещения - lxc move имя-контейнера/имя-снимка имя-контейнера/новое-имя-снимка Создание контейнера из снимка Вы можете создать новый контейнер, который идентичен снимку какого-либо контейнера, за исключением такой уникальной информации типа адресов MAC. lxc copy имя-исходного-контейнера/имя-снимка имя-нового-контейнера Удаление снимка Просто удалить снимок - lxc delete имя-контейнера/имя-снимка Клонирование и переименование Получение чистого образа это всё хорошо, но часто требуется поставить кучу всего в контейнере, сконфигурировать его как надо и сделать из него пачку других контейнеров. Копирование контейнера Для копирования и эффективного клонирования в новый используйте - lxc copy имя-исходного-контейнера имя-нового-контейнера Перемещение контейнера LXD позволяет копировать и перемещать контейнеры между хостами, но это мы рассмотрим в следующих статьях. Сейчас же move означает rename для контейнера - lxc move имя-контейнера новое-имя-контейнера Единственное требование - контейнер должен быть остановлен, остальное будет у нового контейнера таким же, включая такую информацию как MAC адреса. Итог Эта довольно таки длинная статья охватывает часто употребительные команды, которые вы будете использовать ежедневно. У многих команд есть дополнительные параметры, которые позволяют эффективно изменять определенные аспекты. Лучший способ узнать о них использовать параметр --help. Дополнительная информация. Главный сайт LXD - linuxcontainers.org/lxd Оглавление цикла статей про LXD 2.0. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|