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

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

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Информацию о применении системы изоляции приложений docker в ОС Astra Linux Special Edition 1.7 см. в статье Установка и администрирование Docker в Astra Linux 1.7.


Информация
titleДанная статья применима к:
  • ОС СН Смоленск 1.7
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)


Аннотация

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

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

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

Ограничения применения

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

  • Контейнеры Docker не содержат собственной полноценной ОС, и не поддерживают систему инициализации и управления службами systemd. В контейнерах отсутствуют команды systemctl, hostnamectl и пр. Также не поддерживается полноценное использование системы межпроцессного взаимодействия D-Bus. Из ограниченной поддержки D-Bus следует, что многие пользовательские (графические) приложения могут оказаться неработоспособными в контейнере.

  • Docker не предназначен для работы с графическими приложениями. Благодаря тому, что графический сервер Xorg, являющийся основой графической подсистемы Astra Linux, поддерживает вывод графического изображения от удаленных программ по сети, можно настроить работу с некоторыми графическими приложениям. Этот вопрос в каждом конкретном случае должен рассматриваться отдельно.

Якорь
термины
термины
Термины

Виртуализация

Термины

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

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

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

Гостевая операционная система - операционная система, работающая на гостевой машине.

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

Типы виртуализации в ОС СН

Программное обеспечение входящее в состав ОС СН поддерживает два типа виртуализации:

Полная виртуализация - технология виртуализации обеспечивающая

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

Контейнерная виртуализация - технология виртуализации

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

гостевыми операционными системами

операционной системы хост-машины гостевыми приложениями. Экземпляры

операционных системах

приложений, выполняющихся в контейнерах, изолированы друг от друга и (насколько это возможно) от хостовой операционной системы, но при этом

некоторые

аппаратные и программные ресурсы хостовой ОС используются ими совместно;

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

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

Гостевая операционная система — операционная система, работающая на гостевой машине.

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

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

Образ (image) — набор данных (файлов, инструкций) для создания контейнеров. Может рассматриваться как моментальный снимок состояния виртуальной машины, с которого начинается её работа;

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

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

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

Информация
titleСм. также:
Программный Комплекс Средств Виртуализации "Брест"

draw.io Diagram
bordertrue
diagramNameD1
simpleViewerfalse
linksauto
tbstyletop
lboxtrue
diagramWidth1081
revision

1

14


Системы

виртуализации  в ОС СН

В состав ОС СН входят две системы виртуализации, поддерживающие два описанных выше типа виртуальзации:

  • libvirt - система полной виртуальзации;
  • docker - система контейнерной вартуализации.

Система контейнерной виртуализации Docker

Термины

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

Слой - в трактовке Docker набор изменений файловой системы, другими словами - некий моментальный снимок  состояния системы. Слои доступны только для чтения, каждое изменение порождает новый слой. Любой слой может использоваться несколькоми образами одновременно;

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

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

Особенности

Система контейнерной виртуализации Docker позиционируется не только как система виртуализации, но как система быстрого распространения и развёртывания приложений.

Традиционный способ развёртывания приложений предполагает:

виртуализации и контейнерной изоляции в Astra Linux

В составе Astra Linux поддерживаются следующие системы виртуализации и контейнерной изоляции:

Система контейнерной виртуализации Docker

Назначение

Система контейнерной изоляции Docker является в первую очередь системой быстрого распространения и развертывания системных приложений (системных служб, таких, как, например почтовый сервер exim или web-сервер apache2).

Традиционный способ развертывания подобных приложений без использования Docker предполагает следующие шаги:

  • передача администратору целевой ОС инструкций по установке и комплекта неких файлов приложения, как правило, в форме debian-пакета, содержащего:
    • исполнимые файлы;
    • конфигурационные файлы;
    • сценарии установки и удаления.
  • выполнение администратором целевой ОС предоставленных инструкций на целевой машине с целью развёртывания устанавливаемого приложения
  • передачу пользователю приложения комплекта неких файлов приложения как правило:
    • исполнимый файл;
    • конфигурационный файл;
    • сценарии установки и удаления;
    • инструкции по установке;
  • выполнение пользователем для развёртывания предоставленных сценариев и инструкций на целевой машине.

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

Docker предлагает альтернативный вариант развёртывания: развертывания приложений, при котором поставщик приложений передаёт пользователям приложений предварительно настроенные контейнеры с приложениями. Эти контейнеры просто запускаются пользователем на целевой машине, предоставляя каждому приложению изолированное преднастроенное предварительно настроенное окружение для работы. Таким образом, исключается существенная часть ошибокпроблем развертывания, связанных с предварительной настройкой нестандартных нестандартностью пользовательских систем. Хорошим примером использования возможностей Docker по быстрому развёртыванию развертыванию приложений явлется является пример развёртывания развертывания собственного реестра образов, выполняемого путём путем простого скачивания подготовленного образа "Реестр образов".

Помимо этого Docker может применяться для изоляции пользовательских приложений, хотя в первую очередь для это предназначен firejail (см. раздел "Администрировани" - "Создание собственного реестра образов").. Система изоляции пользовательских приложений FireJail).

Рекомендованный сценарий применения Docker

Рекомендованный сценарий применения Docker учитывает основное назначение Docker: быстрое развертывание приложений. Порядок действий

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

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

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

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

draw.io Diagram
bordertrue
diagramNamelayers
simpleViewerfalse
linksauto
tbstyletop
lboxtrue
diagramWidth801
revision45

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

Администрирование

Термины Docker

Установка Docker

В ОС СН Смоленск 1.7 Docker представлен пакетом docker.io и может быть установлен с помощью графического менеджера пакетов или из командной строки командой:

Command
sudo apt install docker.io

Для более ранних версий Astra Linux см. статью: Установка docker в ОС Astra Linux

Создание собственного реестра образов

Загрузить подготовленный образ Docker, содержащий приложение "Реестр образов Docker". Образ "Реестр образов Docker" загружается из реестра образов Docker:

Command
Titlesudo docker run -d -p 5000:5000 --restart=always --name registry registry:2

Unable to find image 'registry:2' locally
2: Pulling from library/registry
0a6724ff3fcd: Pull complete 
d550a247d74f: Pull complete 
1a938458ca36: Pull complete 
acd758c36fc9: Pull complete 
9af6d68b484a: Pull complete 
Digest: sha256:d5459fcb27aecc752520df4b492b08358a1912fcdfa454f7d2101d4b09991daa
Status: Downloaded newer image for registry:2
782dbf275b4521715930a5478c3af2ed3e77614fc6042d03fff9a27740fafd97

После выполнения указанной команды локальный реестр образов автоматически запущен и готов к работе.

Для остановки работы реестра:

Command
sudo docker container stop registry

Удаление реестра:

Command
sudo docker container stop registry && sudo docker container rm -v registry

Настройка внешнего доступа к собственному реестру

Создание собственного образа

См. статью: Создание собственного образа для использования в Docker

Управление Docker-ом

Подробная справка по командному интерфейсу Docker представлена на сайте разработчиков: https://docs.docker.com/engine/reference/commandline/docker/. При работе в системе список команд можно получить с помощью команды:

Command
docker help

Более подробную справку по аргументам команд можно получить с помощью ключа --help, например:

Command
docker attach --help

Часто употребимые команды (аргументы команд для краткости не указаны):

КомандаКраткое описание

docker attach

Подключить стандартные каналы ввода-вывода (stdin, stdout, stderr) к активному контейнеруdocker buildПостроить Docker-образ из Docker-файлаdocker builderУправление модулем построения Docker-образов docker commitСоздание нового Docker-образа из активного контейнераdocker configУправление конфигурациями Dockerdocker container

Управление контейнерами:

docker container createсоздать новый контейнер
docker container execвыполнить команду в активном контейнере
docker container runвыполнить команду в новом контейнере
docker container startактивировать контейнер (контейнеры)
docker container stopдеактивация контейнера
docker contextУправление конекстами Dockerdocker cp Копирование файлов или каталогов между локальной файловой системой и файловой системой контейнераdocker createСоздать новый изменяемый слой в указанном контейнереdocker diffВывести список файлов и каталогов, изменененных с момента создания контейнераdocker eventsВывести  событий, произошедших с различными объектами Dockerdocker execВыполнить команду в активном контейнереdocker exportЭкспортировать файловую систему контейнера как архив формата tardocker historyПоказать историю образаdocker image

Управление образами:

docker image buildсоздание нового образа
docker imagesВывести список образов верхнего уровняdocker importСоздать файловую систему образа из архиваdocker infoВывод системной информацииdocker inspectВывод подробной информации об объектах Dockerdocker killПринудительно деактивировать активный контейнер (контейнеры)docker loadЗагрузить образ из архива tar или из стандартного вводаdocker loginВойти в реестр образовdocker logoutВыйти из реестра образовdocker logsИзвлечь журналы контейнераdocker manifestУправление манифестами и списками манифестов Dockerdocker networkУправление сетямиdocker nodeУправление узлами кластеров Dockerdocker pauseПриостановить все процессы в активном контейнере (контейнерах)docker pluginУправление плагинамиdocker portВывести список отображения портов контейнераdocker psВывести список активных контейнеровdocker pullЗагрузить образ на локальный компьютер из реестра образовdocker pushЗагрузить образ с локального компьютера в реестр образовdocker renameПереименовать контейнерdocker restartПерезапустить контейнер (контейнеры)docker rmУдалить контейнер (контейнеры)docker rmiУдалить образ (образы)docker runВыполнить команду в новом контейнереdocker saveСохранить образ (образы) в архиве tar (через стандартный вывод по умолчанию)docker searchПоиск образов Docker в сети Интернетdocker secretУправление паролями кластеров Dockerdocker serviceУправление сервисами кластеров Dockerdocker stackУправление стекамиdocker startАктивировать контейнер (контейнеры)docker statsОтобразить в режиме реального времени статистику потребления ресурсов контейнеромdocker stopДективировать активный контейнер (контейнеры)docker swarmУправление кластерами Dockerdocker systemУправление службой Dockerdocker tagСоздать тэг образа, ссылающийся на существующий образdocker topВывести список процессов активного контейнераdocker trustУправление ключами и подписями образовdocker unpauseПродолжить выполнение приостановленного активного контейнера (контейнеров)docker updateОбновить конфигурацию контейнера (контейнеров)docker versionОтобразить версию Dockerdocker volumeУправление томами хранения данных для контенеровdocker waitОжидание завершения работы контейнера (контейнеров) и вывод кодов завершения

Загрузка образа в реестр

Получить список доступных на локальной машине образов:

Command
Titlesudo docker image ls
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
wiki/astralinux                 se17rc5             5d69ce8720a7        25 hours ago        318MB
registry                        2                   678dfa38fcfa        12 days ago         26.2MB
localhost:5000/hello-world-se   latest              bf756fb1ae65        12 months ago       13.3kB
hello-world                     latest              bf756fb1ae65        12 months ago       13.3kB

Пометить загружаемый образ тэгом (tag) для загрузки в нужный реестр:

Command
sudo docker tag wiki/astralinux:se17rc5 localhost:5000/se17rc5

Перепроверить список доступных образов, чтобы убедиться, что тэг присвоен верно:

Command
Title sudo docker image ls
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
wiki/astralinux                 se17rc5             5d69ce8720a7        25 hours ago        318MB
localhost:5000/se17rc5          latest              5d69ce8720a7        25 hours ago        318MB
registry                        2                   678dfa38fcfa        12 days ago         26.2MB
localhost:5000/hello-world-se   latest              bf756fb1ae65        12 months ago       13.3kB
hello-world                     latest              bf756fb1ae65        12 months ago       13.3kB

В примере выше первые две строки сообщают об одном и том же образе (идентификатор образа 5d69ce8720a7). При этом образ помечен как размещенный в двух локациях - на локальной машине wiki/astralinux и сетевом реестре на локальной машине localhost:5000.

Загрузить образ в реестр:

Command
Titlesudo docker push localhost:5000/se17rc5
titlesudo docker push localhost:5000/se17rc5
The push refers to repository [localhost:5000/se17rc5]
d5f516170dbe: Pushed 
latest: digest: sha256:8d12b1c9ebe3b3060734965bbd7214a0063633261bf1da17d3caf50ed4f1f534 size: 529

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

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

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

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

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

Контекст - набор файлов в указанной локации;

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

См. далее:

Установка и администрирование Docker в Astra Linux 1.7

Создание собственного образа Astra Linux для использования в Docker

Использование Docker

Получение образа из реестра

Запуск контейнера