LXF134:DrBrown2
(викификация, оформление, иллюстрация) |
(викификация, оформление) |
||
Строка 8: | Строка 8: | ||
* '''Процессы''' Процессы – низший уровень контейнеризации, и вы даже, наверное, ворчите на меня за то, что я отнес их к этой категории. Но процесс – и в самом деле контейнер, в котором выполняется программа. Среди прочего он изолирует пространство памяти программы (у каждого процесса есть иллюзия, что все адресное пространство принадлежит ему) и наборы файловых дескрипторов программы (например, каждый процесс знает, куда подключен его стандартный поток вывода). Эта технология контейнеризации фундаментальна для Linux и Unix и существует с незапамятных времен. | * '''Процессы''' Процессы – низший уровень контейнеризации, и вы даже, наверное, ворчите на меня за то, что я отнес их к этой категории. Но процесс – и в самом деле контейнер, в котором выполняется программа. Среди прочего он изолирует пространство памяти программы (у каждого процесса есть иллюзия, что все адресное пространство принадлежит ему) и наборы файловых дескрипторов программы (например, каждый процесс знает, куда подключен его стандартный поток вывода). Эта технология контейнеризации фундаментальна для Linux и Unix и существует с незапамятных времен. | ||
− | * '''''Chroot''''' Идея здесь в том, чтобы ограничить программу определенной частью файлового дерева («тюрьмой» или «песочницей»). Механизм основан на системном вызове ''chroot'' (изменить корень), который изменяет представление процесса о том, где находится корневой каталог ('''/'''). Например, если процесс делает ''chroot'' в каталог '''/var/run/foobar''' и затем обращается к файлу '''/etc/fstab''', на самом деле он будет обращаться к файлу '''/var/run/foobar/etc/fstab'''. <p> Для правильно написанной программы это мера безопасности – программа не сможет получить доступ ни к каким файлам вне «тюрьмы». Часто с применением этой технологии работают демоны – на ум приходит DNS-сервер ''Bind''. Но данный механизм нельзя назвать сильным, да он никогда и не претендовал на это. Если демон выполняется под пользователем '''root''', и у него есть уязвимость (к примеру, ошибка при переполнении буфера), существует несколько хорошо документированных способов вырваться из тюрьмы. Механизм ''chroot'' на самом деле предназначался для того, чтобы предоставить программе собственное видение файловой системы, а разработчикам – «песочницу» для тестирования новых программ, а не для того, чтобы сдерживать программы с уязвимостями. < | + | * '''''Chroot''''' Идея здесь в том, чтобы ограничить программу определенной частью файлового дерева («тюрьмой» или «песочницей»). Механизм основан на системном вызове ''chroot'' (изменить корень), который изменяет представление процесса о том, где находится корневой каталог ('''/'''). Например, если процесс делает ''chroot'' в каталог '''/var/run/foobar''' и затем обращается к файлу '''/etc/fstab''', на самом деле он будет обращаться к файлу '''/var/run/foobar/etc/fstab'''. <p> Для правильно написанной программы это мера безопасности – программа не сможет получить доступ ни к каким файлам вне «тюрьмы». Часто с применением этой технологии работают демоны – на ум приходит DNS-сервер ''Bind''. Но данный механизм нельзя назвать сильным, да он никогда и не претендовал на это. Если демон выполняется под пользователем '''root''', и у него есть уязвимость (к примеру, ошибка при переполнении буфера), существует несколько хорошо документированных способов вырваться из тюрьмы. Механизм ''chroot'' на самом деле предназначался для того, чтобы предоставить программе собственное видение файловой системы, а разработчикам – «песочницу» для тестирования новых программ, а не для того, чтобы сдерживать программы с уязвимостями. </p><p> При создании «тюрьмы» для программы нужен определенный подход. Нельзя просто бросить узника в камеру без еды и воды и ждать, что он выживет. В «тюрьме» должны быть файлы, необходимые для работы программы, файлы данных, файлы настройки; наверное, копии некоторых файлов из '''/etc''' и '''/dev''', и т. д. |
+ | * '''Контейнеры''' Контейнеры в Linux – самая новая, самая гибкая и (на данный момент) самая страшная технология контейнеризации. Контейнеры очень гибки: они позволяют управлять тем, какие ресурсы нужно изолировать, а какие – разделить. Контейнеры виртуализируют (изолируют) как минимум идентификаторы процессов, механизмы IPC «System V» и точки монтирования (которые являются представлениями контейнера о файловой системе). Кроме этого, задав соответствующую конфигурацию контейнера, можно изолировать другие ресурсы, такие как имя хоста (контейнера может иметь другое имя хоста по сравнению с основной системой) и сетевые интерфейсы (например, у контейнера могут быть свои виртуальные сетевые интерфейсы, каждый со своим MAC-адресом). Контейнеры могут разделять с основной системой некоторые части файловой системы и иметь собственное представление других.</p> <p> Можно создать контейнер для запуска отдельной программы или системы целиком. Как ни странно, второе проще – меньше работы по выбору и настройке разделяемых ресурсов – системы.</p> <p> Технология контейнеров опирается на возможности, появившиеся только в самых последних ядрах – для полной функциональности нужна версия 2.6.29 или больше. И технология в целом на данный момент выглядит сыровато. Есть несколько утилит для управления контейнерами, но ничего (насколько я смог найти) – для автоматизации создания и настройки контейнеров. Например, в ''Virt-manager'' нет мастера создания новых виртуальных машин. Думаю, это вопрос времени. Если вы не можете ждать и готовы принять на себя боль настройки контейнера вручную, взгляните на руководство Бодхи Зазена [Bodhi Zazen] по адресу http://blog.bodhizazen.net/linux/lxc-configure-ubuntu-lucid-containers. | ||
+ | * '''Виртуальные машины''' Виртуальные машины – предельная технология контейнеризации, конечно, не считая, физических компьютеров, на которых можно запускать нужные программы. Внутри виртуальной машины у вас появляется иллюзия, что у вас есть целый компьютер. У виртуальных машин есть собственное ядро ОС; на них можно (и так часто делают) запускать разные ОС.</P> <p> Родные технологии Linux здесь – это ''KVM'' и ''Xen''; доступны и некоторые проприетарные продукты, такие как ''VirtualBox'' от Sun и ''VMware''. Тема виртуализации и виртуальных машин была довольно подробно раскрыта в последних номерах журнала включая [[LXF132:Тема номера|LXF132]], и здесь я не буду углубляться в нее. | ||
+ | |||
+ | ===Вложенные контейнеры=== | ||
+ | |||
+ | Технологии контейнеризации могут вкладываться друг в друга, что позволяет создавать контейнеры внутри контейнеров. Все приложения выполняются внутри процессов. Процессы можно запускать в «тюрьмах» ''chroot'' или в контейнерах. Уж не знаю, зачем запускать «тюрьму» ''chroot'' внутри контейнера, потому что контейнеры сделают все то же самое, что и «тюрьма» ''сhroot''. И, конечно, контейнеры можно создавать на виртуальных машинах. Конечно, все эти контейнеры в конечном счете соперничают друг с другом за физические ресурсы компьютера – память, циклы процессора, ширину полосы пропускания сети и дисковое пространство. |
Текущая версия на 13:09, 17 сентября 2011
|
|
|
[править] Контейнерные технологии
- В Linux таких множество – разберемся с их типами.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
При каждом запуске программы в Linux она разделяет некоторые ресурсы с другими приложениями и виртуализирует (или изолирует) остальные. Какие ресурсы разделяются, а какие изолируются, зависит от используемой технологии. Вот небольшой обзор.
- Процессы Процессы – низший уровень контейнеризации, и вы даже, наверное, ворчите на меня за то, что я отнес их к этой категории. Но процесс – и в самом деле контейнер, в котором выполняется программа. Среди прочего он изолирует пространство памяти программы (у каждого процесса есть иллюзия, что все адресное пространство принадлежит ему) и наборы файловых дескрипторов программы (например, каждый процесс знает, куда подключен его стандартный поток вывода). Эта технология контейнеризации фундаментальна для Linux и Unix и существует с незапамятных времен.
- Chroot Идея здесь в том, чтобы ограничить программу определенной частью файлового дерева («тюрьмой» или «песочницей»). Механизм основан на системном вызове chroot (изменить корень), который изменяет представление процесса о том, где находится корневой каталог (/). Например, если процесс делает chroot в каталог /var/run/foobar и затем обращается к файлу /etc/fstab, на самом деле он будет обращаться к файлу /var/run/foobar/etc/fstab.
Для правильно написанной программы это мера безопасности – программа не сможет получить доступ ни к каким файлам вне «тюрьмы». Часто с применением этой технологии работают демоны – на ум приходит DNS-сервер Bind. Но данный механизм нельзя назвать сильным, да он никогда и не претендовал на это. Если демон выполняется под пользователем root, и у него есть уязвимость (к примеру, ошибка при переполнении буфера), существует несколько хорошо документированных способов вырваться из тюрьмы. Механизм chroot на самом деле предназначался для того, чтобы предоставить программе собственное видение файловой системы, а разработчикам – «песочницу» для тестирования новых программ, а не для того, чтобы сдерживать программы с уязвимостями.
При создании «тюрьмы» для программы нужен определенный подход. Нельзя просто бросить узника в камеру без еды и воды и ждать, что он выживет. В «тюрьме» должны быть файлы, необходимые для работы программы, файлы данных, файлы настройки; наверное, копии некоторых файлов из /etc и /dev, и т. д.
- Контейнеры Контейнеры в Linux – самая новая, самая гибкая и (на данный момент) самая страшная технология контейнеризации. Контейнеры очень гибки: они позволяют управлять тем, какие ресурсы нужно изолировать, а какие – разделить. Контейнеры виртуализируют (изолируют) как минимум идентификаторы процессов, механизмы IPC «System V» и точки монтирования (которые являются представлениями контейнера о файловой системе). Кроме этого, задав соответствующую конфигурацию контейнера, можно изолировать другие ресурсы, такие как имя хоста (контейнера может иметь другое имя хоста по сравнению с основной системой) и сетевые интерфейсы (например, у контейнера могут быть свои виртуальные сетевые интерфейсы, каждый со своим MAC-адресом). Контейнеры могут разделять с основной системой некоторые части файловой системы и иметь собственное представление других.
Можно создать контейнер для запуска отдельной программы или системы целиком. Как ни странно, второе проще – меньше работы по выбору и настройке разделяемых ресурсов – системы.
Технология контейнеров опирается на возможности, появившиеся только в самых последних ядрах – для полной функциональности нужна версия 2.6.29 или больше. И технология в целом на данный момент выглядит сыровато. Есть несколько утилит для управления контейнерами, но ничего (насколько я смог найти) – для автоматизации создания и настройки контейнеров. Например, в Virt-manager нет мастера создания новых виртуальных машин. Думаю, это вопрос времени. Если вы не можете ждать и готовы принять на себя боль настройки контейнера вручную, взгляните на руководство Бодхи Зазена [Bodhi Zazen] по адресу http://blog.bodhizazen.net/linux/lxc-configure-ubuntu-lucid-containers.
- Виртуальные машины Виртуальные машины – предельная технология контейнеризации, конечно, не считая, физических компьютеров, на которых можно запускать нужные программы. Внутри виртуальной машины у вас появляется иллюзия, что у вас есть целый компьютер. У виртуальных машин есть собственное ядро ОС; на них можно (и так часто делают) запускать разные ОС.
Родные технологии Linux здесь – это KVM и Xen; доступны и некоторые проприетарные продукты, такие как VirtualBox от Sun и VMware. Тема виртуализации и виртуальных машин была довольно подробно раскрыта в последних номерах журнала включая LXF132, и здесь я не буду углубляться в нее.