Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 34 Следующий »

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)


ОПЕРАЦИОННАЯ СИСТЕМА СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ «ASTRA LINUX SPECIAL EDITION» Руководство администратора. Часть 1 РУСБ.10015-01 95 01-1

В ОС реализован механизм контейнеризации, обеспечивающий режим виртуализации и изоляции ресурсов на уровне ядра операционной системы. Использование данного механизма позволяет запускать приложение и необходимый ему минимум системных библиотек в полностью стандартизованном контейнере, соединяющемся с хостовой машиной при помощи определенных интерфейсов. Контейнеры используют ядро операционной системы хостовой машины и, в отличие от полной виртуализации, не требуют эмуляции аппаратного обеспечения. Приложения, запущенные внутри разных контейнеров, изолированы и не могут влиять друг на друга.

Аннотация

В статье рассматриваются базовые понятия системы изоляции приложений docker, отличия систем изоляции приложений от систем виртуализации и вытекающие из этих отличий ограничения применения, разъяснятся базовая терминология, применяемая к объектам docker.

Термины

Виртуализация - технология, позволяющая запускать экземпляры операционных систем (гостевые машины) параллельно и изолированно на единственной хост-машине. При этом каждой гостевой операционной системе предоставляется полноценная виртуальная машина, имеющая собственные виртуальные аппаратные ресурсы, и гостевая операционная система использует собственное ядро. При этом гостевая виртуальная машина может отличаться по архитектуре от хост-машины, а гостевая операционная система может быть полностью отличной от операционной системы хост-машины. Виртуализация обеспечивает полное моделирование используемого оборудования полностью индивидуальное для каждой гостевой ОС. Гостевые ОС полностью изолированы друг от друга, и каждая гостевая ОС работает в собственной виртуальной программно-аппаратной среде, полностью копирующей реальное оборудование и содержащей полную копию всех необходимых ресурсов;

Изоляция приложений (контейнерная изоляция) - технология, позволяющая выполнять экземпляры приложений (групп приложений) в изолированной среде внутри операционной системы хост-машины. В маркетинговых целях часто обозначается термином "контейнерная виртуализация", хотя в самом деле полноценной виртуализацией не является. Соответственно, в качестве аналога термина "виртуальная машина" используется термин "контейнер", хотя контейнер не является полноценной виртуальной машиной. Контейнерная виртуализация - технология виртуализации обеспечивающая совместное использование ресурсов операциооной системы хост-машины гостевыми приложениями. Экземпляры приложений, выполняющихся в контейнерах, изолированы друг от друга и (насколько это возможно) от хостовой операционной системы, но при этом ресурсы хостовой ОС используются ими совместно. Частным случаем приложения, изолированно выполняемого в контейнере, может быть экземпляр хостовой операционной системы (система lxc);

Гипервизор - программное обеспечение, позволяющее запускать множественные гостевые (виртуальные) машины или контейнеры на единственной физической машине (хост-машине), обеспечивающее  предоставление ресурсов виртуальным машинам и обеспечивающее ограничение и разграничение прав доступа;

Гостевая машина - виртуальная машина, запускаемая в изолированной среде системы виртуализации внутри хостовой операционной системы;

Гостевая операционная система - операционная система, работающая на гостевой машине. Термин "гостевая операционная система" неприменим к контейнерам, так как контейнеры не предоставляют полноценную операционную систему, а в разной мере используют хостовую операционную систему;

Контейнер - изолированная среда выполнения приложений (групп приложений), работающая в хостовой операционной системе;

Хостовая операционная система, хостовая ОС - операционная система хост-машины;

Хост-машина - машина, в операционной системе которой запущен гипервизор виртуализации или контейнерной изоляции, под управлением которого работают гостевые машины или контейнеры.

Графическое сравнение технологий виртуализаци и контейнерной изоляции на примере QEMU/KVM (виртуализация) и docker (изоляция) приведено на рисунке:


Системы виртуализации и контейнерной изоляции в 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: быстрое развертывание приложений. Порядок действий

  1. Создать (загрузить) исходный образ;
  2. Создать из этого образа контейнер, работая в котором выполнить и сохранить дополнительные настройки, то есть настройки запуска нужного приложения в ограниченной среде Docker;
  3. Конвертировать контейнер с выполненными настройками в новый образ;
  4. Скопировать новый образ на целевые машины для использования;
  5. На целевых машинах дальнейшее использование зависит от поставленных задач:
    1. Можно использовать контейнеры, сохраняющие возникающие при эксплуатации изменения в этих контейнерах;
    2. Можно использовать образ, монтируя к нему внешние каталоги, в которых сохраняются изменения, не сохраняя изменения в контейнерах;
    3. Можно комбинировать указанные варианты;
  6. В любом из выбранных вариантов использования далее установленное приложение эксплуатируется на целевой машине в контейнере.

Ограничения

  • Docker, в отличие от виртуальных машин, использует ядро хостовой ОС. Из этого следует:
    • Так как в Astra Linux Special Edition функции КСЗ интегрированы в ядро, выполнение приложений в контейнерах в режимах защиты (Базовый "Орел", Усиленный "Воронеж", Максимальный "Смоленск"), отличающихся от режима защиты хостовой операционной системы не поддерживается. Также не поддерживается варианты отличий режимов, связанные с возможностями принудительного отключения МРД или МКЦ в Усиленном и Максимальном режимах защиты. Приложение, работающее в контейнере, всегда будет ограничено действующими в хостовой операционной системе правилами МРД и МКЦ, а попытки нарушить или изменить эти правила приложением из контейнера приведут к ошибкам;
    • Не обеспечивает никакой кросс-платформенности. Контейнеры на операционных системах с разными ядрами могут быть запущены с помощью специальных приемов (запуска виртуальных машин), требующих дополнительного расхода ресурсов в Astra Linux не поддерживается. То есть:
      • В Astra Linux Common Edition допускается использовать только контейнер для Astra Linux Common Edition;
      • В Astra Linux Special Edition допускается использовать только контейнер для Astra Linux Special Edition в том же режиме защиты, а переключение режима защиты хостовой ОС может привести к неработоспособности ранее созданных контейнеров;
  • Контейнер Docker не содержит собственной полноценной ОС, и не поддерживает systemd. В контейнерах отсутствуют команды systemctl, hostnamectl и пр. Из того, что не поддерживается systemd следует, что  не поддерживается dbus. Из того, что не поддерживается dbus следует, что многие пользовательские приложения могут оказаться неработоспособными в контейнере.
  • Docker не предназначен для:
    • Повышения производительности приложений. Контейнеризация Docker потребляет меньше ресурсов, чем полноценная система виртуализации, но, в любом случае, контейнеризация потребляет часть доступных ресурсов;
    • Повышения безопасности. Изоляция приложений в разных контейнерах затрудняет распространение угроз при компрометации приложений, однако все контейнеры разделяют одну хостовую ОС, и всегда существует риск появления приложений с неполной изоляцией; 
    • Работы с графическими приложениями. Благодаря тому, что современные графические менеджеры поддерживают удаленную работу с подключением через сети, графические приложения могут использоваться в контейнерах, однако это требует дополнительных настроек. 
  • Docker вносит значительные изменения в сетевые настройки, что может привести к полной или частичной неработоспособности хост-машины.

Преимущества

Главное преимущество контейнеров в том, что по сравнению с системами виртуализации запуск контейнеров требует значительно меньших вычислительных ресурсов, чем запуск полноценной виртуальной машины.

Кроме этого, Docker для экономии ресурсов поддерживает систему повторного использования "слоев". "Слой" в терминологии Docker - это некий моментальный снимок состояния системы, а "образ" - это итоговое состояние системы с учетом состояний всех подлежащих слоев. При этом "слои" могут использоваться повторно разными "образами":

Дополнительным эффектом от повторного использования "слоев" является снижение объемов передаваемых данных при передаче подготовленных в виде образов прикладных программ: при использовании реестра образов Docker передаваться будет только новые слои, в примере выше - слой "Базовая система Astra Linux SE" будет загружен из реестра образов только один раз, далее загружаться будут только новые слои.

Термины

Докерфайл - текстовый документ, содержащий все команды, выполнение которых требуется для создания образа Docker. Образы могут создаваться автоматически путём интерпретации докерфайлов и применения содержащихся в докерфайле инструкция к образу;

Слой - внутри образов слой это изменение файловой системы, представленное инструкцией в докерфайле. Слои последовательно "накладываются" на базовую файловую систему образа, создавая итоговый образ. Любой слой может использоваться несколькими образами одновременно. При изменении образа в нём заменяются только изменившиеся слои, что позволяет обновлять образы быстро и с небольшими затратами ресурсов. Размер образа равен сумме размеров входящих в него слоёв;

Образ - основа контейнеров. Контейнер не имеет состояний и не изменяется. Контейнер состоит из:

  1. Базовой файловой системы;
  2. Упорядоченного набора изменений ("слоев") в этой файловой системе;
  3. Базовых параметров исполнения, применяемых при запуске контейнеров. 

Контейнер - образ, находящийся в работе, то есть образ с новым изменяющимся слоем. При работе контейнера все изменения сохраняются в новом слое, а образ (т.е. все предыдущие слои) остаётся неизменным;

Реестр образов - сетевое хранилище подготовленных образов, доступных для загрузки на целевые машины и последующего выполнения в качестве контейнеров.

Дополнительным эффектом от повторного использования "слоев" является снижение объемов передаваемых данных при передаче подготовленных в виде образов прикладных программ: при использовании реестра образов Docker передаваться будет только новые слои, в примере выше - слой "Базовая система Astra Linux SE" будет загружен из реестра образов только один раз, далее загружаться будут только новые слои.

  • Нет меток