LXC Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:руководство_по_ubuntu_server:виртуализация:lxc [2012/10/27 08:51]
[Libvirt LXC]
wiki:руководство_по_ubuntu_server:виртуализация:lxc [2014/05/15 13:56] (текущий)
[Настройка основной системы]
Строка 54: Строка 54:
 **LXC** сохраняет информацию контейнеров и корневую файловую систему (с резервным хранилищем по умолчанию) в **/​var/​lib/​lxc**. Также шаблоны создания контейнеров предпочитают хранить закешированную информацию по дистрибутивам в **/​var/​cache/​lxc**. **LXC** сохраняет информацию контейнеров и корневую файловую систему (с резервным хранилищем по умолчанию) в **/​var/​lib/​lxc**. Также шаблоны создания контейнеров предпочитают хранить закешированную информацию по дистрибутивам в **/​var/​cache/​lxc**.
  
-Если вы хотите использовать для ​**/var** иную файловую системувы можете ​смонтировать в этот каталог другую файловую систему большего объема. Если у вас есть ​диск, предназначенный для этих целей, вы можете ​просто смонтировать его ​в **/var/lib/lxc**Если вы предпочитаете использовать другое расположение, такое как /srv, вы можете примонтировать ​его ​к этому каталогу или создать символическую ссылку. Например,​ если /srv является большой смонтированной файловой системой,​ создайте ​два ​каталога и символьные ссылки на них:+Дефолтный путь, называемый ​**lxcpath**, может ​быть переопределён в командной строке ключом **-P** или навсегда через ​**lxcpath = /новый/путь** в **/etc/lxc/lxc.conf** 
 +Если вы переопределяете **lxcpath**,​ то каталог снимков **snap** добавляется к **lxcpath** ​и магическим ​образом за ним следует. Кэш шаблонов,​ к сожалениюжёстко вшит и не просто его ​сменить. 
 +Но можно всё сделать ​через ​символические ссылки. Например,​ если /srv является большой смонтированной файловой системой,​ создайте каталог и символьную ссылку на него:
 <​code>​ <​code>​
-sudo mkdir /​srv/​lxclib ​/​srv/​lxccache +sudo mkdir /​srv/​lxccache 
-sudo rm -rf /​var/​lib/​lxc ​/var/cache/lxc +sudo rm -rf /​var/​cache/​lxc
-sudo ln -s /srv/lxclib /var/lib/lxc+
 sudo ln -s /​srv/​lxccache /​var/​cache/​lxc sudo ln -s /​srv/​lxccache /​var/​cache/​lxc
 </​code>​ </​code>​
 или, используя монтирование:​ или, используя монтирование:​
 <​code>​ <​code>​
-sudo mkdir /​srv/​lxclib ​/​srv/​lxccache+sudo mkdir /​srv/​lxccache
 sudo sed -i '$a \ sudo sed -i '$a \
-/srv/lxclib /​var/​lib/​lxc ​   none defaults,​bind 0 0 \ 
 /​srv/​lxccache /​var/​cache/​lxc none defaults,​bind 0 0' /etc/fstab /​srv/​lxccache /​var/​cache/​lxc none defaults,​bind 0 0' /etc/fstab
 sudo mount -a sudo mount -a
Строка 79: Строка 79:
  
 Если основная система имеет **/var**, размеченный как **btrfs**, средства администрирования LXC распознают это и автоматически будут использовать для клонирования контейнеров снимки btrfs. Если основная система имеет **/var**, размеченный как **btrfs**, средства администрирования LXC распознают это и автоматически будут использовать для клонирования контейнеров снимки btrfs.
 +===ZFS===
 +
 +Подобно **btrfs**, использование **zfs** позволит применять возможности,​ но уже **ZFS**: подтом (subvolume) для контейнера,​ быстрое создание снимков и клонов,​ более эффективное использование места на диске за счёт дедупликации. ​
  
 ===Apparmor=== ===Apparmor===
  
-LXC поставляется с профилем Apparmor, предназначенным для защиты основной системы от случайного неправильного использования привилегий внутри контейнера. Нпример,​ контейнер не должен иметь возможности писать в каталог /​proc/​sysrq-trigger или менять большинство файлов в каталоге /sys.+LXC поставляется с профилем Apparmor, предназначенным для защиты основной системы от случайного неправильного использования привилегий внутри контейнера. Например,​ контейнер не должен иметь возможности писать в каталог /​proc/​sysrq-trigger или менять большинство файлов в каталоге /sys.
  
 Профиль **usr.bin.lxc-start** используется при запуске **lxc-start**. Этот профиль в основном предотвращает монтирование **lxc-start** новых файловых систем вне корневой файловой системы контейнера. Перед инициализацией контейнера LXC запрашивает переключение на профиль контейнера. По умолчанию используется профиль **lxc-container-default**,​ определенный в **/​etc/​apparmor.d/​lxc/​lxc-default**. Этот профиль запрещает контейнеру доступ к многим опасным каталогам и монтирование большинства файловых систем. Профиль **usr.bin.lxc-start** используется при запуске **lxc-start**. Этот профиль в основном предотвращает монтирование **lxc-start** новых файловых систем вне корневой файловой системы контейнера. Перед инициализацией контейнера LXC запрашивает переключение на профиль контейнера. По умолчанию используется профиль **lxc-container-default**,​ определенный в **/​etc/​apparmor.d/​lxc/​lxc-default**. Этот профиль запрещает контейнеру доступ к многим опасным каталогам и монтирование большинства файловых систем.
Строка 198: Строка 201:
 ===Клонирование=== ===Клонирование===
  
-Для быстрой подготовки к работе вы можете решить изменить canonical контейнер в соответствии с вашими требованиями и затем сделать множество его копий. Это можно осуществить с помощью программы lxc-clone. Дан существующий контейнер с именем C1, новый контейнер C2 мможет быть создан:​+Для быстрой подготовки к работе вы можете решить изменить canonical контейнер в соответствии с вашими требованиями и затем сделать множество его копий. Это можно осуществить с помощью программы lxc-clone. Дан существующий контейнер с именем C1, новый контейнер C2 может быть создан:​
 <​code>​sudo lxc-clone -o C1 -n C2</​code>​ <​code>​sudo lxc-clone -o C1 -n C2</​code>​
  
Строка 437: Строка 440:
 ===Преобразование контейнера LXC в libvirt-lxc=== ===Преобразование контейнера LXC в libvirt-lxc===
  
-Creating Containers showed how to create ​LXC containersIf you've created a valid LXC container in this wayyou can manage it with libvirt. ​Fetch a sample ​xml file from +В разделе [[#​создание_контейнеров|Создание контейнеров]] показано как создавать ​LXC контейнерыЕсли вы создали рабочий ​LXC контейнер таким способомто вы можете управлять им при помощи **libvirt**Загрузите ​xml файл в качестве примера:​
 <​code>​wget http://​people.canonical.com/​~serge/​o1.xml</​code>​ <​code>​wget http://​people.canonical.com/​~serge/​o1.xml</​code>​
- +Отредактируйте этот файл, заменив название контейнера и расположение корневой файловой системыЗатем вы можете зарегистрировать контейнер командой:
-Edit this file to replace the container name and root filesystem locationsThen you can define the container with: +
 <​code>​virsh -c lxc:/// define o1.xml</​code>​ <​code>​virsh -c lxc:/// define o1.xml</​code>​
  
 ===Создание контейнера из облачного образа=== ===Создание контейнера из облачного образа===
  
-If you prefer to create a pristine new container just for LXC, you can download an ubuntu ​cloud imageextract it, and point a libvirt LXC xml file to itFor instancefind the url for a root tarball for the latest daily Ubuntu 12.04 LTS cloud image using +Если вы предпочитаете создавать новые оригинальные контейнеры только под ​LXC, вы можете загрузить образ для облака ​ubuntu, ​извлечь его и указать его расположение в xml файле ​libvirt LXC. Напримернайдем адрес образа последней ежедневной корневой сборки ​Ubuntu 12.04 LTS следующим образом:​ 
- +<​code>​
 url1=`ubuntu-cloudimg-query precise daily $arch --format "​%{url}\n"​` url1=`ubuntu-cloudimg-query precise daily $arch --format "​%{url}\n"​`
 url=`echo $url1 | sed -e '​s/​.tar.gz/​-root\0/'​` url=`echo $url1 | sed -e '​s/​.tar.gz/​-root\0/'​`
 wget $url wget $url
 filename=`basename $url` filename=`basename $url`
 +</​code>​
  
-Extract the downloaded tarballfor instance +Распакуем загруженный образнапример,​ так: 
- +<​code>​
 mkdir $HOME/c1 mkdir $HOME/c1
 cd $HOME/c1 cd $HOME/c1
 sudo tar zxf $filename sudo tar zxf $filename
 +</​code>​
  
-Download the xml template +Загрузим шаблон ​xml:
 <​code>​wget http://​people.canonical.com/​~serge/​o1.xml</​code>​ <​code>​wget http://​people.canonical.com/​~serge/​o1.xml</​code>​
  
-In the xml template, replace the name o1 with c1 and the source directory ​/​var/​lib/​lxc/​o1/​rootfs ​with $HOME/​c1. ​Then define the container using +В шаблоне заменим **o1** на **c1** и каталог расположения **/​var/​lib/​lxc/​o1/​rootfs** на **$HOME/c1**Затем зарегистрируем контейнер с помощью:​ 
- +<​code>​virsh define o1.xml</​code>​
- +
-virsh define o1.xml+
  
 ===Взаимодействие с контейнерами libvirt=== ===Взаимодействие с контейнерами libvirt===
  
-As we've seenyou can create a libvirt-lxc ​container using +Как мы виделивы можете создавать ​libvirt-lxc ​контейнеры с помощью:​
 <​code>​virsh -c lxc:/// define container.xml</​code>​ <​code>​virsh -c lxc:/// define container.xml</​code>​
  
-To start a container ​called container, use +Для запуска контейнера с именем **container** используйте:​
 <​code>​virsh -c lxc:/// start container</​code>​ <​code>​virsh -c lxc:/// start container</​code>​
  
-To stop a running container, use +Для остановки запущенного контейнера:​
 <​code>​virsh -c lxc:/// destroy container</​code>​ <​code>​virsh -c lxc:/// destroy container</​code>​
  
-Note that whereas the lxc-destroy ​command deletes the containerthe virsh destroy ​command stops a running containerTo delete the container definition, use +Обратите внимание,​ что хотя команда **lxc-destroy** уничтожает контейнеркоманда **virsh destroy** только останавливает работающий контейнерДля удаления регистрации контейнера используйте:​
 <​code>​virsh -c lxc:/// undefine container</​code>​ <​code>​virsh -c lxc:/// undefine container</​code>​
  
-To get a console to a running container, use +Для получения консоли работающего контейнера используйте:​
 <​code>​virsh -c lxc:/// console container</​code>​ <​code>​virsh -c lxc:/// console container</​code>​
- +Для выхода из консоли нажмите комбинацию **Ctrl-]**.
-Exit the console by simultaneously pressing control and ].+
  
 ====Пакет lxcguest==== ====Пакет lxcguest====
  
-In the 11.04 (Natty) ​and 11.10 (Oneiric) ​releases of Ubuntu, a package was introduced called ​lxcguest. ​An unmodified root image could not be safely booted inside a containerbut an image with the lxcguest ​package installed could be booted as a container, on bare hardware, or in a Xen, kvm, or VMware ​virtual machine.+В выпусках Ubuntu ​11.04 (Natty) ​и 11.10 (Oneiric) ​был представлен пакет **lxcguest**Немодифицированный коревой образ не может быть безопасно загружен внутри контейнераоднако образ с установленным пакетом **lxcguest** может быть загружен как контейнер на голом железе или под виртуальной машиной **Xen****kvm** или **VMware**.
  
-As of the 12.04 LTS releasethe work previously done by the lxcguest ​package was pushed into the core packagesand the lxcguest ​package was removedAs a resultan unmodified ​12.04 LTS image can be booted as a containeron bare hardware, or in a Xen, kvm, or VMware ​virtual machineTo use an older release, the lxcguest ​package should still be used.+Что касается сборки **12.04 LTS**функции,​ выполнявшиеся ранее пакетом **lxcguest**были погружены пакеты ядра, а пакет **lxcguest** был удаленКак результаторигинальный образ **12.04 LTS** без изменений может быть загружен в качестве контейнера как на голом железетак и под виртуальными машинами **Xen****kvm** или **VMware**Использование более ранних выпусков все еще требует использование пакета **lxcguest ​**.
  
 ====Безопасность==== ====Безопасность====
  
-A namespace maps ids to resourcesBy not providing a container any id with which to reference a resourcethe resource can be protectedThis is the basis of some of the security afforded to container usersFor instance, IPC namespaces are completely isolatedOther namespaces, howeverhave various leaks which allow privilege to be inappropriately exerted from a container into another container or to the host.+Пространство имен сопоставляет идентификаторы с ресурсамиЧтобы не предоставлять доступ контейнерам к любым идентификаторам (idуказывающим на ресурсы,​ ресурсы должны быть защищеныЭто является основой некоторой безопасности,​ предоставляемой пользователям контейнеровНапримерпространство имен ​IPC (взаимодействия между процессами) полностью изолированоОднако другие пространства имен имеют различные уязвимостикоторые позволяют получать неправильно предоставленные привилегии из одного контейнера в другой или в основную систему.
  
-By default, ​LXC containers are started under a Apparmor ​policy to restrict some actionsHoweverwhile stronger security is a goal for future releasesin 12.04 LTS the goal of the Apparmor ​policy is not to stop malicious actions but rather to stop accidental harm of the host by the guest.+По умолчанию ​LXC контейнеры запускаются под управлением политики ​Apparmor ​для ограничения некоторых действийНесмотря на точто более строгая безопасность является задачей следующих редакцийв 12.04 LTS задачей политики ​Apparmor ​является не прекращение злонамеренных действий,​ а предупреждения случайных повреждений основной системы из гостевой.
  
-See the LXC security ​wiki page for more, uptodate information.+Смотрите [[http://wiki.ubuntu.com/​LxcSecurity|LxcSecurity wiki]] страницу для дополнительной актуальной информации.
  
 ===Используемые системные вызовы=== ===Используемые системные вызовы===
  
-It is a core container feature that containers share a kernel with the hostThereforeif the kernel contains any exploitable system callsthe container can exploit these as wellOnce the container controls the kernel it can fully control any resource known to the host.+Возможность совместного использования ядра системы контейнерами является базовой особенностьюПоэтомуесли ядро содержит некоторые потенциально опасные вызовыконтейнеры также могут их использоватьКак только контейнер сможет контролировать ядро системы,​ он сможет полностью управлять любыми ресурсами,​ доступными основной системе.
  
 ====Ссылки==== ====Ссылки====
  
-    The DeveloperWorks ​article ​LXC: Linux container tools was an early introduction to the use of containers+  ~~ Статья в DeveloperWorks ​[[https://​www.ibm.com/​developerworks/​linux/​library/​l-lxc-containers/​|LXC: Linux container tools]] является введением в использование контейнеров
- +  ~~ [[http://​www.ibm.com/​developerworks/​linux/​library/​l-lxc-security/​index.html|The Secure Containers Cookbook]] демонстрирует использование модулей безопасности с целью сделать контейнеры более безопасными
-    ​The Secure Containers Cookbook ​demonstrated the use of security modules to make containers more secure+  ~~ Страницы руководств могут быть найдены по данным ссылкам
- +    ​~~ [[http://​manpages.ubuntu.com/​manpages/​en/​man7/​capabilities.7.html|capabilities]]. 
-    Manual pages referenced above can be found at: +    ​~~ [[http://​manpages.ubuntu.com/​manpages/​en/​man5/​lxc.conf.5.html|lxc.conf]]. 
- +  ~~ Основное развитие проекта ​LXC на [[http://​lxc.sf.net/​|Sourceforge]]
-    capabilities +  ~~ Проблемы безопасности приведены и обсуждаются на странице [[http://wiki.ubuntu.com/​LxcSecurity|LxcSecurity wiki]]. 
-    lxc.conf +  ~~ Для дополнительной информации по пространствам имен в Linux смотрите[[http://​dl.acm.org/​citation.cfm?​id=1400097.1400109&​coll=DL&​dl=GUIDE&​CFID=133158545&​CFTOKEN=80778967|S.Bhattiprolu,​ E.W.Biederman,​ S.E.Hallyn, and D.Lezcano. Virtual Servers and Checkpoint/Restart in Mainstream Linux. SIGOPS ​Operating ​Systems Review, 42(5), 2008]]
- +  ~~ Стефан Грабер (Stéphane Graber), в предверии выхода 20 февраля 2014 года релиза LXC 1.0, опубликовал цикл статей о Linux Containers. [[https://​www.stgraber.org/​2013/​12/​20/​lxc-1-0-blog-post-series/​|LXC 1.0: Blog post series]] ([[http://​vasilisc.com/​lxc-1-0-blog-post-series|перевод]]).
-    The upstream ​LXC project is hosted at Sourceforge. +
- +
-    LXC security issues are listed and discussed at the LXC Security ​wiki page +
- +
-    For more on namespaces in Linux, see: S. Bhattiprolu,​ E. W. Biederman, S. E. Hallyn, and D. Lezcano. Virtual Servers and Check- point/Restart in Mainstream Linux. SIGOPS ​Op- erating ​Systems Review, 42(5), 2008. +
  
 ---- ----
Строка 536: Строка 521:
 [[wiki:​руководство_по_ubuntu_server:​виртуализация:​ubuntu_cloud|<​-назад]] |  [[wiki:​руководство_по_ubuntu_server:​виртуализация:​ubuntu_cloud|<​-назад]] | 
 [[wiki:​руководство_по_ubuntu_server:​кластеризация|далее->​]]</​style>​ [[wiki:​руководство_по_ubuntu_server:​кластеризация|далее->​]]</​style>​
-