LXC (LXD) контейнеры (Основы) - skench/blog GitHub Wiki
После установки lxc контейнера, нужно выполнить начальную настройку. В терминале надо выполнить команду "lxc init". Вам будут заданы вопросы. Чтобы применять настройки по умолчанию, нажимайте Enter. Важно!!! В пункте "Name of the storage backend to use (dir, btrfs, ceph, lvm, zfs) [default=zfs]:" я выбираю dir.
Команды: lxc image list images: - Показывает абсолютно все образы которые доступны для скачивания.
-- Посмотреть дополнительные параметры доступных для скачивания образов, можно следующей командой: lxc image list images:ubuntu/18.04/arm64 -cL Ниже пример того что мы увидим
ALIASES ubuntu/18.04/arm64 ubuntu/18.04/default/arm64 ubuntu/bionic/arm64 ubuntu/bionic/default/arm64
Все ключи lxc.image.list Столбцы сокращенных букв:
l - самый короткий псевдоним изображения (и, возможно, число других псевдонимов) L - разделенный новой строкой список всех псевдонимов изображений f - отпечаток пальца (короткий) F - отпечаток пальца (длинный) p - является ли изображение публичным г - описание а - Архитектура s - размер u - дата загрузки т - тип
Команда: lxc image list images:ubuntu/18.04/arm64 --verbose есть один из параметров полезный -v , --verbose -Показать все информационные сообщения.
Ссылка на все консольные команды lxc...: https://reposcope.com/package/lxd
Команда: lxc image copy images:ubuntu/18.04/default/arm64 local: --alias=ubuntu-18.04x64 (--alias= после знака "=" указывается имя с которым мы сохраним образ на ПК где установили lxc.
Команда: lxc launch -p default ubuntu-18.04x64 test -p default тут мы говорим явно какую схему использовать нашим контейнерам для соединения с интернетом. Ниже пример как можно вносить изменения.
Команда: lxc profile edit default
config: {} | description: Default LXD profile | devices: |
eth0: | name: eth0 | nictype: bridged | если заменить на macvlan то можно получать ip адреса от вашего parent: lxdbr0 | dhcp сервера, ниже надо вместо lxdbr0 указать имя вашего сетевого type: nic | интерфейса, например enp1s0. root: | path: / | pool: default | type: disk |
name: default | Имя схемы. used_by: |
/1.0/containers/test-ubuntu | Это имена наших контейнеров, они все используют схему default, /1.0/containers/python | можно создать свою схему, и просто указать чтобы контейнеры /1.0/containers/nginx | использовали ее. Ниже будет пример, как создать такую схему. /1.0/containers/golang | Пример, отдельная сеть для проводного и wifi. При помощи правил /1.0/containers/... | iptables можно пробрасывать порты с локального интерфейса на виртуальный. /1.0/containers/... | Примеры будут ниже, а так же на отдельной странице в будущем. /1.0/containers/... |
Примеры. Тут идет проброс с wifi интерфейса на ip адрес контейнера, после знака ":" указываем порт. iptables -t nat -A PREROUTING -i wlp1s0 -p tcp --dport 80 -j DNAT --to 10.238.253.163:80 iptables -t nat -A PREROUTING -i wlp1s0 -p udp -m udp --dport 5060 -j DNAT --to 10.238.253.83:5060
Сеть. Для начала надо узнать какие есть сетевые интерфейсы на вашем ПК. В ОС Ubuntu это можно сделать разными способами, в консоли приведу 2 примера.
Команда: ip addres или ip addr show.
Виртуальный сетевой интерфейс выглядит следующим образом "lxdbr0", теперь можем посмотреть сетевые настройки в lxc.
Команда: lxc network show lxdbr0
Мы увидим ту же структуру когда редактировали профиль "default" созданный по умолчанию. config:
ipv4.address: 10.238.253.1/24 ipv4.nat: "true" ipv6.address: fd42:e30e:9b8c:4007::1/64 ipv6.nat: "true"
description: "" name: lxdbr0 type: bridge used_by: - /1.0/containers/test-ubuntu - /1.0/containers/python - /1.0/containers/nginx - /1.0/containers/golang - /1.0/containers/... - /1.0/containers/... - /1.0/containers/... managed: true status: Created locations: - none
Мы можем создавать собственные сети и именовать их как себе угодно Команда: lxc network create testbr0
И как было показано выше "lxc network show testbr0" посмотреть информацию о ней. Можем сами указать тот диапозон ip адресов который нам интересен выполнив Команда: lxc network create testbr0 ipv6.address=none ipv4.address=10.0.3.1/24 ipv4.nat=true
Если мы хотим уже существующий контейнер прикрепить к новой сети, выполняем Команда: lxc network attach my-container testbr0 eth0
Полезное свойство - это dhcp аренда, позволяет так же легко изменить ip адрес у контейнера Команда: lxc config device set "container_name" eth0 ipv4.address 10.0.3.123