обеспечивает изолированную , которая контролирует .
Изоляция означает, что, с точки зрения ПО, работающего внутри контейнера, все ресурсы полностью принадлежат ему и единственный выполняемый (или процессы) запущен внутри контейнера. В действительности в той же системе может работать множество других процессов, но ПО внутри контейнера никак с ними не пересекается и не может с ними .
Контроль ресурсов означает, что набор ресурсов, доступных ПО в контейнере, выделяется контейнеру () при его создании, причем эти ресурсы являются ограниченными и отслеживаются. Сюда входит выделение ресурсов , рабочей , ресурсов, одной или нескольких . С точки зрения ПО, существуют только эти ресурсы. Ресурсы распределяются таким образом, что ресурсы, выделенные одному контейнеру, не могут взаимодействовать с ресурсами, выделенными другим контейнерам, работающим на той же системе.
Изоляция и контроль ресурсов обеспечиваются с помощью возможностей , которые используются и управляются с помощью . Конкретные функциональные возможности, доступные для контейнеров и используемые ими, зависят от . Функциональные возможности, доступные в ОС Linux, описаны в настоящем в качестве примера. Дополнительная об аналогичных функциональных возможностях других систем приведена в соответствующей по этим системам.
Для доступа к блочному вводу/выводу контейнер по умолчанию имеет доступ к файловой системе, состоящей из образа контейнера, использованного для создания контейнера в режиме «только для чтения», плюс контейнера для чтения/записи. Файловая система по умолчанию является временной, и уровень контейнера удаляется при удалении контейнера. Дополнительные, обычно постоянные, ресурсы для хранения данных могут стать доступны ПО внутри контейнера за счет контейнера контейнерной службой — либо в виде дополнений файловой системы внутри контейнера, внесенных из другого места вне контейнера, либо посредством предоставления одного или нескольких сервисов (как правило, облачных). Такие дополнительные средства хранения необходимы, если ПО в контейнере должно иметь возможность обращаться к хранения, имеющим длительный . Во всех случаях видимое расположение и объектов хранения внутри контейнера сопоставляется с реальным расположением за пределами контейнера.
Аналогичным образом для доступа к сетевым функциональным возможностям ресурсы, доступные для программного кода, работающего в контейнере, контролируются с помощью контейнерной службы и конфигурации, применяемой к контейнеру, т. е. сетевые функциональные возможности могут включаться/выключаться и настраиваться. Можно не предоставлять контейнеру никаких сетевых функциональных возможностей (т. е. никаких открытых , никаких доступных сетевых устройств, в связи с чем пути к конечным сетевым устройствам тоже отсутствуют). Также можно детально контролировать доступ к контейнеру и доступ из контейнера.
Порты, открытые контейнером, можно контролировать и сопоставлять с и портами, видимыми извне. Например, контейнер может открыть порт 80 для HTTP-, но он может быть сопоставлен с портом 8080 для внешнего доступа (например, ). В можно контролировать и сопоставлять IP-адреса, порты, имена хостов, МАС-адреса, службы и службы DNS.
Одна из важных форм сетевого взаимодействия, которая используется с контейнерами, — это когда сеть объединяет исключительно набор связанных контейнеров, например контейнеры, которые представляют собой единое приложение, реализованное с использованием , причем различные компоненты приложения выполняются в разных контейнерах. Это форма , когда только назначенные контейнеры могут общаться друг с другом (кроме любых конкретных внешних конечных устройств), как если бы они были единственными объектами в . В сеть могут входить различные системы, а также различные другие сети, обеспечивая большую гибкость в месте расположения каждого контейнера, т. е. обеспечивается прозрачность расположения контейнера. При этом сохраняется возможность контроля и ограничения в .
В ОС Linux контроль над ресурсами осуществляется с помощью функциональной возможности, называемой контрольными группами или cgroups. Она обеспечивает контроль над ресурсами, доступными наборам процессов, включая процессор, память, на блочные устройства (т. е. файловые системы), доступ к устройствам, сетевое подключение.
В ОС Linux изоляция реализуется с помощью пространств имен. Таким образом, любые ресурсы, к которым обращается один контейнер, являются частью одного пространства имен, в то время как ресурсы, к которым обращаются другие контейнеры, относятся к другим пространствам имен. Пространства имен работают таким образом, что ПО, работающее в процессе, который был запущен в одном пространстве имен, может «видеть» только ресурсы в этом пространстве имен.
В ОС Linux существуют следующие виды пространств имен (начиная с ядра Linux 4.10):
- Interprocess Communication (ipc): относится к межпроцессному взаимодействию. Только процессы в одном и том же пространстве имен могут обмениваться данными (например, выделять общую память);
- Mount (mnt): относится к точкам монтирования, т. е. местам, куда монтируются (дополнительные) файловые системы. Начальный набор для монтирования доступен при создании контейнера контейнерной службой, но после этого любые новые монтирования будут видны только внутри контейнера;
- Network (net): содержит ресурсы, связанные с сетью, такие как , IP-адреса, таблица маршрутизации, список сокетов, отслеживания соединений и т. д.;
- Process ID (pid): содержит набор идентификаторов процессов; первый процесс в пространстве имен имеет идентификатор 1, и этот процесс имеет специальный режим, аналогичный процессу init в базовой ОС;
- User ID (user): предоставляет идентификаторы , позволяющие как идентифицировать пользователя, так и контролировать : пространство имен пользователей сопоставляет идентификаторы пользователей в пространстве имен с идентификаторами пользователей в базовой системе, что позволяет тщательно контролировать привилегии и обеспечить более высокие привилегии в пространстве имен, которые не предоставляются для каких-либо ресурсов вне этого пространства имен;
- UTS: дает возможность различным процессам иметь разные имена хостов и .
Совместное использование cgroups и пространств имен обеспечивает контроль ресурсов и изоляцию, необходимую для контейнеров [из 7.2.3 Ресурсы контейнеров, изоляция и контроль ГОСТ Р 70860—2023]