Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Информация | ||
---|---|---|
| ||
Информация | ||
---|---|---|
| ||
В ОС реализован механизм контейнеризации, обеспечивающий режим виртуализации и изоляции ресурсов на уровне ядра операционной системы. Использование данного механизма позволяет запускать приложение и необходимый ему минимум системных библиотек в полностью стандартизованном контейнере, соединяющемся с хостовой машиной при помощи определенных интерфейсов. Контейнеры используют ядро операционной системы хостовой машины и, в отличие от полной виртуализации, не требуют эмуляции аппаратного обеспечения. Приложения, запущенные внутри разных контейнеров, изолированы и не могут влиять друг на друга. |
Аннотация
В статье рассматриваются базовые понятия системы изоляции приложений docker, отличия систем изоляции приложений от систем виртуализации и вытекающие из этих отличий ограничения применения, разъяснятся базовая терминология, применяемая к объектам docker.
Термины
Виртуализация - технология, позволяющая запускать экземпляры операционных систем (гостевые машины) параллельно и изолированно на единственной хост-машине. При этом каждой гостевой операционной системе предоставляется полноценная виртуальная машина, имеющая собственные виртуальные аппаратные ресурсы, и гостевая операционная система использует собственное ядро. При этом гостевая виртуальная машина может отличаться по архитектуре от хост-машины, а гостевая операционная система может быть полностью отличной от операционной системы хост-машины. Виртуализация обеспечивает полное моделирование используемого оборудования полностью индивидуальное для каждой гостевой ОС. Гостевые ОС полностью изолированы друг от друга, и каждая гостевая ОС работает в собственной виртуальной программно-аппаратной среде, полностью копирующей реальное оборудование и содержащей полную копию всех необходимых ресурсов;
Изоляция приложений (контейнерная изоляция) - технология, позволяющая выполнять экземпляры приложений (групп приложений) в изолированной среде внутри операционной системы хост-машины. Традиционно контейнерная изоляция приложений обозначается термином "контейнерная виртуализация", хотя в самом деле полноценной виртуализацией не является. Соответственно, термин "контейнер" используется в качестве аналога термина "виртуальная машина", хотя контейнер не является полноценной виртуальной машиной. Контейнерная виртуализация - технология виртуализации обеспечивающая совместное использование ресурсов операциооной системы хост-машины гостевыми приложениями. Экземпляры приложений, выполняющихся в контейнерах, изолированы друг от друга и (насколько это возможно) от хостовой операционной системы, но при этом ресурсы хостовой ОС используются ими совместно. Частным случаем приложения, изолированно выполняемого в контейнере, может быть экземпляр хостовой операционной системы (система lxc);
Гипервизор - программное обеспечение, позволяющее запускать множественные гостевые (виртуальные) машины или контейнеры на единственной физической машине (хост-машине), обеспечивающее предоставление ресурсов виртуальным машинам и обеспечивающее ограничение и разграничение прав доступа;
Гостевая машина - виртуальная машина, запускаемая в изолированной среде системы виртуализации внутри хостовой операционной системы;
Гостевая операционная система - операционная система, работающая на гостевой машине. Термин "гостевая операционная система" неприменим к контейнерам, так как контейнеры не предоставляют полноценную операционную систему, а в разной мере используют хостовую операционную систему;
Контейнер - изолированная среда выполнения приложений (групп приложений), работающая в хостовой операционной системе;
Хостовая операционная система, хостовая ОС - операционная система хост-машины;
Хост-машина - машина, в операционной системе которой запущен гипервизор виртуализации или контейнерной изоляции, под управлением которого работают гостевые машины или контейнеры.
Графическое сравнение технологий виртуализаци и контейнерной изоляции на примере QEMU/KVM (виртуализация) и docker (изоляция) приведено на рисунке:
draw.io Diagram | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Системы виртуализации и контейнерной изоляции в Astra Linux
В составе Astra Linux поддерживаются следующие системы виртуализации и контейнерной изоляции:
- QEMU/KVM - полноценная система виртуализации. См. Виртуализация QEMU/KVM в Astra Linux;
- lxc - система контейнерной изоляции, ориентированная на работу с приложениями - операционными системами (см. FireJail и LXC);
- docker - система контейнерной изоляции, ориентированная на работу с приложениями - системными службами (рассматривается далее в настоящей статье);
- firejail - система контейнерной изоляции пользовательского уровня, ориентированная работу с пользовательскими приложениями (см. FireJail и LXC).
Система контейнерной виртуализации Docker
Назначение
Система контейнерной изоляции Docker является в первую очередь системой быстрого распространения и развертывания системных приложений (системных служб, таких, как, например почтовый сервер exim или web-сервер apache2).Традиционный способ развертывания подобных приложений без использования Docker предполагает следующие шаги:
- передача администратору целевой ОС инструкций по установке и комплекта неких файлов приложения, как правило, в форме debian-пакета, содержащего:
- исполнимые файлы;
- конфигурационные файлы;
- сценарии установки и удаления.
- выполнение администратором целевой ОС предоставленных инструкций на целевой машине с целью развёртывания устанавливаемого приложения.
При этом, несмотря на то, что разработчиками приложений тратятся значительные усилия на создание и проверку сценариев развёртывания, учитывающих возможные особенности целевых машин и возможные конфликты с другими приложениями, выполнение действий по установке часто завершается неудачей - в силу специфических особенностей целевых машин, все варианты которых предусмотреть невозможно.
Docker предлагает альтернативный вариант развертывания приложений, при котором поставщик приложений передаёт пользователям приложений предварительно настроенные контейнеры с приложениями. Эти контейнеры просто запускаются пользователем на целевой машине, предоставляя каждому приложению изолированное предварительно настроенное окружение для работы. Таким образом, исключается существенная часть ошибок развертывания, связанных с предварительной настройкой нестандартных пользовательских систем. Хорошим примером использования возможностей Docker по быстрому развёртыванию приложений является пример развертывания собственного реестра образов, выполняемого путем простого скачивания подготовленного образа (см. раздел "Администрирование" - "Создание собственного реестра образов").
Docker не предназначен для изоляции пользовательских приложений, для этого предназначен firejail (см. FireJail и LXC).
Рекомендованный сценарий применения Docker
Рекомендованный сценарий применения Docker учитывает основное назначение Docker: быстрое развертывание приложений. Порядок действий
- Создать (загрузить) исходный образ;
- Создать из этого образа контейнер, работая в котором выполнить и сохранить дополнительные настройки, то есть настройки запуска нужного приложения в ограниченной среде Docker;
- Конвертировать контейнер с выполненными настройками в новый образ;
- Скопировать новый образ на целевые машины для использования;
- На целевых машинах дальнейшее использование зависит от поставленных задач:
- Можно использовать контейнеры, сохраняющие возникающие при эксплуатации изменения в этих контейнерах;
- Можно использовать образ, монтируя к нему внешние каталоги, в которых сохраняются изменения, не сохраняя изменения в контейнерах;
- Можно комбинировать указанные варианты;
- В любом из выбранных вариантов использования далее установленное приложение эксплуатируется на целевой машине в контейнере.
Ограничения
Предупреждение |
---|
|
Преимущества
Главное преимущество контейнеров в том, что по сравнению с системами виртуализации запуск контейнеров требует значительно меньших вычислительных ресурсов, чем запуск полноценной виртуальной машины.
Кроме этого, Docker для экономии ресурсов поддерживает систему повторного использования "слоев". "Слой" в терминологии Docker - это некий моментальный снимок состояния системы, а "образ" - это итоговое состояние системы с учетом состояний всех подлежащих слоев. При этом "слои" могут использоваться повторно разными "образами":
draw.io Diagram | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Дополнительным эффектом от повторного использования "слоев" является снижение объемов передаваемых данных при передаче подготовленных в виде образов прикладных программ: при использовании реестра образов Docker передаваться будет только новые слои, в примере выше - слой "Базовая система Astra Linux SE" будет загружен из реестра образов только один раз, далее загружаться будут только новые слои.
Термины
Докерфайл - текстовый документ, содержащий все команды, выполнение которых требуется для создания образа Docker. Образы могут создаваться автоматически путём интерпретации докерфайлов и применения содержащихся в докерфайле инструкция к образу;
Слой - внутри образов слой это изменение файловой системы, представленное инструкцией в докерфайле. Слои последовательно "накладываются" на базовую файловую систему образа, создавая итоговый образ. Любой слой может использоваться несколькими образами одновременно. При изменении образа в нём заменяются только изменившиеся слои, что позволяет обновлять образы быстро и с небольшими затратами ресурсов. Размер образа равен сумме размеров входящих в него слоёв;
Образ - основа контейнеров. Контейнер не имеет состояний и не изменяется. Контейнер состоит из:
- Базовой файловой системы;
- Упорядоченного набора изменений ("слоев") в этой файловой системе;
- Базовых параметров исполнения, применяемых при запуске контейнеров.
Контейнер - образ, находящийся в работе, то есть образ с новым изменяющимся слоем. При работе контейнера все изменения сохраняются в новом слое, а образ (т.е. все предыдущие слои) остаётся неизменным;
Реестр образов - сетевое хранилище подготовленных образов, доступных для загрузки на целевые машины и последующего выполнения в качестве контейнеров.
Дополнительным эффектом от повторного использования "слоев" является снижение объемов передаваемых данных при передаче подготовленных в виде образов прикладных программ: при использовании реестра образов Docker передаваться будет только новые слои, в примере выше - слой "Базовая система Astra Linux SE" будет загружен из реестра образов только один раз, далее загружаться будут только новые слои.