[Из песочницы] Создание метода клонирования LXC-контейнеров

Создание основы файловой системы для контейнеров Устанавливаем основные компоненты, которые понадобятся для создания общей файловой системы, командой: $ apt-get install debootstrap lxc lxc-templates lxctl cgroup-lite rsync Далее включим две управляющие опции.В конфигурации сети включим сетевой мост для контейнеров: $ nano /etc/init/lxc-net.conf USE_LXC_BRIDGE=«true» А для автозапуска контейнеров при старте системы включим: LXC_AUTO=«true» В файле lxc.conf, командой: $ nano /etc/init/lxc.conf Далее отредактируем конфигурационный файл: $ nano /etc/default/lxc И добавим в него следующие строки: Введем переменную: $ lxcRoot=»/lxc» Создадим каталог /lxc: $ mkdir -p ${lxcRoot} Создаем место где хранятся контейнеры и информация по их настройкам, а также место кеширования данных дистрибутивов для ускорения создания множества контейнеров: $ mkdir /${lxcRoot}/lxclib /${lxcRoot}/lxccache Удалим старый каталог: $ rm -rf /var/lib/lxc /var/cache/lxc Создадим ссылки на каталоги: $ ln -s /${lxcRoot}/lxclib /var/lib/lxc $ ln -s /${lxcRoot}/lxccache /var/cache/lxc Создаем базовый LXC-контейнер на основе Ubuntu с именем hName и с версией Trusty: $ lxc-create -t ubuntu -n hName -r trusty Далее приступим к созданию неизменяемой части LXC-контейнера.Переходим в каталог созданного контейнера: $ cd /lxc/lxclib/hName/rootfs В нем создаем каталог с общей частью, назовем его common: $ mkdir common Переносим в него неизменяемые каталоги: $ mv bin lib lib64 sbin usr common/ Создаем символические ссылки на них: $ ln -s common/bin $ ln -s common/sbin $ ln -s common/lib $ ln -s common/lib64 $ ln -s common/usr Создание контейнера LXC После подготовки базового образа системы приступим непосредственно к созданию первого контейнера в системе. Назовем его просто «Node1»: Создаем каталог для первого контейнера: $ mkdir -p /lxc/lxclib/Node1/rootfs Переходим в него: $ cd /lxc/lxclib/Node1/rootfs При помощи программы rsync копируем неизменяемую часть в первый контейнер: $ rsync --exclude=/dev/* --exclude=/common/* -avz /lxc/lxclib/hName/rootfs/* ./ Далее для первого контейнера создаем два каталога для общей части и для устройств: $ mkdir /lxc/lxclib/Node1/rootfs/common $ mkdir /lxc/lxclib/Node1/rootfs/dev Монтируем их при помощи программы Bind: $ mount --bind /lxc/lxclib/hName/rootfs/dev /lxc/lxclib/Node1/rootfs/dev $ mount --bind /lxc/lxclib/hName/rootfs/common /lxc/lxclib/Node1/rootfs/common $ mount -o remount, ro /lxc/lxclib/Node1/rootfs/common Копируем файл конфигурации и файл fstab из базового контейнера в первый: $ cp /lxc/lxclib/hName/config /lxc/lxclib/Node1/ $ cp /lxc/lxclib/hName/fstab /lxc/lxclib/Node1/ Меняем имя в конфигурации первого контейнера на Node1, а также MAC-адрес: $ nano /lxc/lxclib/Node1/config

© Habrahabr.ru