Принципы работы с контейнерами#
Контейнеризация — метод упаковки и распространения приложений с открытым исходным кодом. Контейнеры изолируют приложения и используют различные методы развертывания, основанные на образах. Platform V SberLinux OS Server (SLO) (далее по тексту – ОС SberLinux OS Server) использует контейнеры, сочетая их с технологиями cgroups (для управления ресурсами), namespace (пространства имен для изоляции процессов), Secure multi-tenancy и SELinux (для обеспечения безопасности). Это снижает вероятность взлома системы безопасности и обеспечивает среду для создания и использования контейнеров корпоративного уровня.
ОС SberLinux OS Server предоставляет инструменты командной строки для создания, управления и запуска контейнеров в pod. Также позволяет создавать отдельные контейнеры, образы этих контейнеров и управлять ими.
К ним относятся:
Podman - управляет pod и образами контейнеров;
Buildah - создает, отправляет и подписывает образы контейнеров;
Skopeo - копирует, проверяет, удаляет и подписывает образы;
runc - предоставляет функций запуска и сборки контейнеров Podman;
crun - обеспечивает гибкость, контроль и безопасность для rootless-контейнеров (не требующих привилегий администратора) благодаря дополнительной настраиваемой среде выполнения.
Поскольку эти инструменты совместимы с Open Container Initiative (OCI), их можно использовать для управления контейнерами Linux, которые создаются и управляются другими OCI-совместимыми контейнерными движками.
Характеристики Podman, Buildah и Skopeo#
Основные преимущества инструментов Podman, Skopeo и Buildah включают:
запуск в режиме пользователя без административных полномочий - контейнеры пользователя без административных полномочий намного безопаснее, поскольку они запускаются без каких-либо дополнительных привилегий;
демон не требуется - эти инструменты требуют гораздо меньших ресурсов в режиме ожидания, потому что, если не запускаете контейнеры, Podman не запускается;
встроенная интеграция systemd интеграция - Podman позволяет создавать модульные файлы systemd и запускать контейнеры в качестве системных служб.
Podman, Buildah и CRI-O container engine по умолчанию использует внутренний каталог хранилища /var/lib/containers.
Для программного взаимодействия с Podman можно использовать RESTful API Podman версии 2.0, он работает в среде rootful и среде rootless.
Общие команды Podman#
Чтобы управлять образами, контейнерами и ресурсами контейнера с помощью утилиты podman, используются перечисленные ниже основные команды. Для отображения полного списка команд Podman, используйте podman -h.
Команда |
Обозначение |
|---|---|
|
Присоединение к работающему контейнеру |
|
Создание нового образа из измененного контейнера |
|
Создание контрольной точки одного или нескольких запущенных контейнеров |
|
Восстановление одного или нескольких контейнеров из контрольной точки |
|
Создание образа, используя инструкции |
|
Создание контейнера без его запуска |
|
Проверка изменений в файловых системах контейнера |
|
Запуск процесса в работающем контейнере |
|
Экспорт содержимого файловой системы контейнера в виде tar-архива |
|
Вывод списка команд или справки по одной команде |
|
Запуск проверки работоспособности контейнера |
|
Отображение истории указанного образа |
|
Вывод списка образов в локальном хранилище |
|
Импорт архивного файла для создания образа файловой системы |
|
Отображение системной информации |
|
Отображение конфигурации контейнера или образа |
|
Отправка сигнала завершения процесса одному или нескольким запущенным контейнерам |
|
Генерация YAML-файлов Kubernetes на основе контейнеров, pod или томов |
|
Создание контейнеров, pod и томов на основе YAML-файлов Kubernetes |
|
Загрузка образа из архива |
|
Аутентификация для входа в реестр контейнеров |
|
Выход из реестра контейнеров |
|
Извлечение log-файлов из контейнера |
|
Монтирование корневой файловой системы рабочего контейнера |
|
Приостановка всех процессов в одном или нескольких контейнерах |
|
Вывод списка контейнеров |
|
Сопоставление портов для контейнера |
|
Извлечение образа из реестра |
|
Размещение образа в конкретном месте назначения |
|
Перезапуск одного или нескольких контейнеров |
|
Удаление одного или нескольких контейнеров с хоста. Добавьте к команде ключ |
|
Удаление одного или нескольких образов из локального хранилища |
|
Запуск команды в новом контейнере |
|
Сохранение образа в архив |
|
Поиск образ в реестре |
|
Запуск одного или нескольких контейнеров |
|
Процентное отображение использования процессора, памяти, сетевого ввода-вывода, блочного ввода-вывода и PID для одного или нескольких контейнеров |
|
Остановка одного или нескольких контейнеров |
|
Добавление дополнительного имени к локальному образу |
|
Отображение запущенных процессов контейнера |
|
Размонтирование корневой файловой системы рабочего контейнера |
|
Отмена приостановки процессов в одном или нескольких контейнерах |
|
Отображение информации о версии Podman |
|
Блок на одном или нескольких контейнерах |
Процессорная архитектура для контейнеризации#
ОС SberLinux OS Server поддерживает контейнеризацию на процессорах с архитектурой x86-64.
Установка Podman, Buildah и Skopeo#
Для того чтобы установить пакет podman, используйте команду:
dnf install podman
Для того чтобы установить пакет buildah, используйте команду:
dnf install buildah
Для того чтобы установить пакет skopeo, используйте команду:
dnf install skopeo
Настройка rootless-контейнеров#
Запуск контейнеров от имени администратора при помощи Podman, Skopeo или Buildah предоставляет полный доступ ко всем функциям системы.
С опцией rootless containers можно использовать контейнеры от имени пользователя без административных полномочий. Это позволяет безопасно запускать большинство функций под обычными учетными записями.
Предоставленный сценарий поможет настроить Podman, Skopeo или Buildah для работы с пользователями без административных полномочий. В нем также описаны некоторые ограничения настройки, поскольку обычные учетные записи не имеют полного доступа ко всем функциям ОС, которые могут потребоваться для запуска их контейнеров.
Предварительные условия |
|---|
- Установлен пакет |
Сценарий настройки rootless-контейнеров#
Для настройки контейнеров от имени пользователя без административных полномочий выполните следующие действия:
Создайте новую учетную запись пользователя:
useradd -c "First User" firstuserЧтобы установить пароль, воспользуйтесь командой:
passwd firstuserПосле чего:
команда
useraddавтоматически устанавливает диапазон доступных идентификаторов пользователей и групп в файлах/etc/subuidи/etc/subgid;если вручную изменяется
/etc/subuidили/etc/subgid, запустите командуpodman system migrate, чтобы применить изменения.
Подключитесь к пользователю:
ssh firstuser@server.example.ruПримечание
Не используйте команды
suилиsu -, так как они не задают правильные переменные окружения.Извлеките образ контейнера
<container image>:podman pull <container image>Запустите контейнер с именем
myubiи отобразите версию ОС:podman run --rm --name=myubi <container image> \ cat /etc/os-releaseПример вывода команды:
NAME="Platform V SberLinux OS Server" VERSION="{{version}}"
Особые рекомендации для rootless-контейнеров#
При запуске контейнеров от имени пользователя без привилегий администратора необходимо учитывать следующие факторы:
Путь к хранилищу контейнеров хоста отличается для администраторов
(/var/lib/containers/storage)и пользователей($HOME/.local/share/containers/storage);Пользователям предоставляется специальное разрешение на запуск от имени идентификаторов, входящих в UID и GID хост-системы. Но при этом у них нет прав администратора для операционной системы на хосте;
При изменении
/etc/subuidили/etc/subgidвручную необходимо запустить командуpodman system migrateдля сохранения настроек;Если необходимо настроить среду rootless, создайте файлы конфигурации в своем домашнем каталоге
($HOME/.config/containers). Файлы конфигурации включаютstorage.conf(для настройки хранилища) иcontainers.conf(для различных настроек контейнера). Также можете создать файлregistries.confдля идентификации реестров контейнеров, которые доступны при использовании Podman для извлечения, поиска или запуска образов;Некоторые системные функции нельзя изменить без административных полномочий. Например, нельзя изменить системные часы, установив параметр
SYS_TIMEвнутри контейнера и запустив службу сетевого времени (ntpd).Чтобы изменить эти функции, необходимо запустить контейнер от имени администратора, например:
podman run -d --cap-add SYS_TIME ntpdПримечание
Выполнение команды в такой форме позволит
ntpdизменить время для всей системы, а не только внутри контейнера.Rootless-контейнер не может получить доступ к порту с номером менее
1024. Внутри namespace контейнер без полномочий администратора может, например, запустить службу, предоставляющую порт80службы httpd, но это недоступно за пределами namespace:podman run -d httpdПри этом контейнеру требуются полномочия администратора, чтобы предоставить доступ к этому порту хост-системе:
podman run -d -p 80:80 httpdАдминистратор может разрешить пользователям предоставлять доступ к службам на портах с номерами ниже
1024, но это небезопасно.Чтобы разрешить пользователям подключаться до порта
80, выполните следующую команду:echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start