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

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

Внимание!

Программное обеспечение расширенного репозитория является сторонним по отношению к Astra Linux, не дорабатывается с точки зрения выполнения требований по безопасности информации и не проверяется при сертификации.
Подробнее см. Использование стороннего программного обеспечения в аттестованных информационных системах, функционирующих под управлением Astra Linux Special Edition.

При использовании программного обеспечения расширенного репозитория рекомендуется для дополнительной изоляции процессов осуществлять их запуск в изолированной программной среде (контейнере) [п. 7.2 РукКСЗ1]. При использовании для этих целей Docker-контейнеров их запуск целесообразно осуществлять от имени непривилегированного пользователя в rootless-режиме, а при включенном мандатном контроле целостности (МКЦ) с применением технологии запуска контейнеров на пониженном [п. 7.2.1] или выделенном [п. 7.2.7] уровне МКЦ.

Введение

Podman — инструмент командной строки с открытым исходным кодом, предоставляющий возможности поиска, сборки, передачи и запуска приложений в контейнерной изоляции. Функционально podman аналогичен системе контейнерной изоляции docker, но предоставляет дополнительные возможности по управлению группами контейнеров (т.н. оркестрация контейнеров, container orchestration) и может работать без прав доступа суперпользователя (root).

По умолчанию podman использует в качестве средства контейнеризации библиотеку crun. В Astra Linux работа контейнеров поддерживается только при использовании контейнеризации runc, т.е. при работе в Astra Linux для запуска контейнеров следует использовать опции команды podman --runtime=runc и --cgroup-manager=cgroupfs.

Работа с контейнерами без прав суперпользователя имеет следующие особенности:

  • файлы непривилегированных пользователей хранятся в их домашних каталогах, в подкаталоге .local/share/containers;
  • непривилегированные пользователи по умолчанию не могут использовать привилегированные сетевые порты и некоторые команды;

Podman использует контейнеры стандарта Open Container Initiative (OCI), что обеспечивает совместимость с образами docker.

Термины

Терминология podman совпадает с терминологией docker, см. Установка и администрирование Docker в Astra Linux 1.7.

Дополнительно применяются термины:

  • под (pod) — группа контейнеров, выполняющихся совместно и разделяющих общие ресурсы. Подробное описание концепции подов доступно по ссылке: Pods;
  • регистр (registry) — служба, обеспечивающая хранение и распространение образов;
  • репозиторий (repository) — хранилище образов;
  • тэг (tag) — буквенно-цифровой идентификатор, присваиваемый образу в репозитории для дифференциации версий образов.

Установка

Инструмент podman представлен одноименным пакетом podman. Для установки пакета требуется подключить расширенный репозиторий. После подключения репозитория пакет может быть установлен с помощью графического менеджера пакетов synaptic или из командной строки командой:

sudo apt install podman

При работке с включенным мандатным управлением доступом (МРД) после установки пакета необходимо перезапустить пользовательскую сессию или перезагрузить операционную систему.

Стандартные команды

Стандартный вызов инструмента имеет следующий синтаксис:

podman <опции> <podman-команда>
Где:

  • опции — необязательные модификаторы команд;
  • podman-команда — действие к исполнению. Команды при этом имеют собственные опции и аргументы и могут иметь собственные подкоманды, например docker pod create.

Стандартные команды podman в основном аналогичны командам docker. Получить список опций и команд с их описанием можно выполнив команду:

podman --help

Пример вывода команды:

Manage pods, containers and images

Usage:
  podman [options] [command]

Available Commands:
  attach      Attach to a running container
  auto-update Auto update containers according to their auto-update policy
  build       Build an image using instructions from Containerfiles
  commit      Create new image based on the changed container
  container   Manage containers
  cp          Copy files/folders between a container and the local filesystem
  create      Create but do not start a container
  diff        Display the changes to the object's file system
  events      Show podman events
  exec        Run a process in a running container
  export      Export container's filesystem contents as a tar archive
  generate    Generate structured data based on containers, pods or volumes
  healthcheck Manage health checks on containers
  help        Help about any command
  history     Show history of a specified image
  image       Manage images
  images      List images in local storage
  import      Import a tarball to create a filesystem image
  info        Display podman system information
  init        Initialize one or more containers
  inspect     Display the configuration of object denoted by ID
  kill        Kill one or more running containers with a specific signal
  kube        Play containers, pods or volumes from a structured file
  load        Load image(s) from a tar archive
  login       Login to a container registry
  logout      Logout of a container registry
  logs        Fetch the logs of one or more containers
  machine     Manage a virtual machine
  manifest    Manipulate manifest lists and image indexes
  mount       Mount a working container's root filesystem
  network     Manage networks
  pause       Pause all the processes in one or more containers
  pod         Manage pods
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image from a registry
  push        Push an image to a specified destination
  rename      Rename an existing container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Removes one or more images from local storage
  run         Run a command in a new container
  save        Save image(s) to an archive
  search      Search registry for image
  secret      Manage secrets
  start       Start one or more containers
  stats       Display a live stream of container resource usage statistics
  stop        Stop one or more containers
  system      Manage podman
  tag         Add an additional name to a local image
  top         Display the running processes of a container
  unmount     Unmounts working container's root filesystem
  unpause     Unpause the processes in one or more containers
  unshare     Run a command in a modified user namespace
  untag       Remove a name from a local image
  update      update an existing container
  version     Display the Podman version information
  volume      Manage volumes
  wait        Block on one or more containers

Options:
      --cgroup-manager string       Cgroup manager to use ("cgroupfs"|"systemd") (default "systemd")
      --conmon string               Path of the conmon binary
  -c, --connection string           Connection to use for remote Podman service
      --events-backend string       Events backend to use ("file"|"journald"|"none") (default "file")
      --help                        Help for podman
      --hooks-dir strings           Set the OCI hooks directory path (may be set multiple times) (default [/usr/share/containers/oci/hooks.d])
      --identity string             path to SSH identity file, (CONTAINER_SSHKEY)
      --log-level string            Log messages above specified level (trace, debug, info, warn, warning, error, fatal, panic) (default "warn")
      --namespace string            Set the libpod namespace, used to create separate views of the containers and pods on the system
      --network-cmd-path string     Path to the command for configuring the network
      --network-config-dir string   Path of the configuration directory for networks
      --noout                       do not output to stdout
  -r, --remote                      Access remote Podman service
      --root string                 Path to the root directory in which data, including images, is stored
      --runroot string              Path to the 'run directory' where all state information is stored
      --runtime string              Path to the OCI-compatible binary used to run containers. (default "runc")
      --runtime-flag stringArray    add global flags for the container runtime
      --ssh string                  define the ssh mode (default "golang")
      --storage-driver string       Select which storage driver is used to manage storage of images and containers
      --storage-opt stringArray     Used to pass an option to the storage driver
      --syslog                      Output logging information to syslog as well as the console (default false)
      --tmpdir string               Path to the tmp directory for libpod state content.
                                    
                                    Note: use the environment variable 'TMPDIR' to change the temporary storage location for container images, '/var/tmp'.
                                    
      --url string                  URL to access Podman service (CONTAINER_HOST) (default "unix:/run/user/1000/podman/podman.sock")
  -v, --version                     version for podman
      --volumepath string           Path to the volume directory in which volume data is stored

Подробные справки по podman-командам доступны в справочной системе man. Названия страниц справок формируются как podman-<команда>[-<подкоманда>]. Например, для команды attach справка может быть получена командой:

man podman-attach
А для команды podman create — командой:
man podman-pod-create
Полный список podman-команд с их описанием и описанием отличий от docker доступен по ссылке: https://github.com/containers/podman/blob/main/transfer.md.

Базовый функционал

Включение отладки

Для включения отладки используется опция --log-level с указанием требуемого уровня отладки. Возможные уровни отладки (перечислены в порядке уменьшения количества выводимой информации):

  • trace;
  • debug;
  • info;
  • warn (применяется по умолчанию);
  • warning;
  • error;
  • fatal;
  • panic.

Отладочная информация выводится в стандартный поток сообщений об ошибках (stderr). Пример команды с включенным уровнем отладки debug:

podman --log-level debug ps -a 

Аутентификация по паролю при подключении к репозиториям

Репозитории образов могут требовать для подключения аутентификационные данные. Для выполнения базовой аутентификации (аутентификации по имени и паролю) используется podman-команда login:

podman login <имя_репозитория>[:<порт_репозитория>]
например:
podman login repo:5000
Команда запрашивает имя и пароль, и сохраняет их в формате, пригодном для использования следующими командами.

Для удаления сохраненных аутентификационных данных используется команда:

podman logоut <имя_репозитория>[:<порт_репозитория>]

Загрузка готовых образов

Готовые образы доступны в сети Интернет в репозиториях (registry) образов. Для загрузки образа можно использовать podman-команду pull:

podman pull <имя_образа>
Имя образа может включать явное указание репозитория (полное имя), например, образ Astra Linux Special Edition 1.7.4 из репозитория registry.astralinux.ru: registry.astralinux.ru/library/alse:1.7.4

Как и в docker, поиск и загрузка образа могут быть выполнены одной командой запуска контейнера (podman-команда run). Например, загрузка образа и запуск контейнера Astra Linux Special Edition 1.7.4 из репозитория registry.astralinux.ru:

podman --runtime=runc --cgroup-manager=cgroupfs run -it --rm registry.astralinux.ru/library/alse:1.7.4 /bin/bash

Примеры общедоступных репозиториев образов:

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

podman info -f "{{.Registries}}"

Пример вывода команды:
map[search:[registry.redhat.io docker.io]]

Поиск готовых образов

Для поиска образов в репозиториях используется podman-команда search. Репозиторий, в котором должен выполняться поиск, может быть указан в аргументе команды как префикс шаблона для поиска.  Например, поиск в репозитории Astra Linux (registry.astralinux.ru):

podman search --list-tags registry.astralinux.ru/alse

Пример вывода команды:

NAME                         TAG
registry.astralinux.ru/alse  1.7
registry.astralinux.ru/alse  1.7.0
registry.astralinux.ru/alse  1.7.0-mg9.0.0
registry.astralinux.ru/alse  1.7.1
registry.astralinux.ru/alse  1.7.1-mg9.0.0
registry.astralinux.ru/alse  1.7.2
registry.astralinux.ru/alse  1.7.2-mg9.0.0
registry.astralinux.ru/alse  1.7.3
registry.astralinux.ru/alse  1.7.3-mg8.2.1
registry.astralinux.ru/alse  1.7.3-mg9.0.0
registry.astralinux.ru/alse  1.7.3uu1
registry.astralinux.ru/alse  1.7.3uu1-mg9.1.1
registry.astralinux.ru/alse  1.7.3uu1-mg9.1.2
registry.astralinux.ru/alse  1.7.3uu2
registry.astralinux.ru/alse  1.7.3uu2-mg9.2.0
registry.astralinux.ru/alse  1.7.4
registry.astralinux.ru/alse  1.7.4-mg11.2.0
registry.astralinux.ru/alse  1.7.4-mg11.3.0
registry.astralinux.ru/alse  1.7.4uu1
registry.astralinux.ru/alse  1.7.4uu1-mg11.3.0
registry.astralinux.ru/alse  latest

Также репозитории, в которых должен выполняться поиск можно указать в файле /etc/containers/registries.conf в виде списка:

Приведенная ниже опция unqualified-search-registries позволяет выполнять поиск в указанных репозиториях по кратким именам образов, т.е. именам, не содержащим явное указание репозитория.
Не рекомендуется использовать эту возможность, так как существует риск подмены образа одноименным из ранее указанного репозитория.
Рекомендуется всегда использовать полные имена образов (имена с явным указанием репозиториев).
unqualified-search-registries = [ 'registry.redhat.io', 'docker.io']

При этом поиск будет выполняться в том порядке, в котором перечислены репозитории.

Также можно задать репозитории для поиска по полным именам. Эти параметры должны располагаться в конфигурационном файле после параметра unqualified-search-registries. Например, определение собственного репозитория на основе пакета docker-registry может выглядеть так:

[[registry]]
location="registry:5000"
insecure=true

Где:

  • registry — имя сервера (должно разрешаться в IP-адрес этого сервера). Может быть заменено IP-адресом сервера;
  • 5000 — IP-порт (используется docker-registry по умолчанию);
  • insecure=true — разрешение работать по протоколу HTTP (используется docker-registry по умолчанию).

Полное описание синтаксиса файла  /etc/containers/registries.conf доступно в справочной системе man:

man containers-redistries.conf

Список загруженных образов

Список загруженных образов можно получить podman-командой images:

podman images

Пример вывода команды:

REPOSITORY                           TAG         IMAGE ID      CREATED      SIZE
registry.astralinux.ru/library/alse  1.7.4       557b8fe356eb  7 weeks ago  98.4 MB

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

Для запуска контейнера из загруженного образа используется podman-команда run, например:

podman run -it --rm registry.astralinux.ru/library/alse:1.7.4 /bin/bash
Для запуска контейнера в фоновом режиме используется опция podman-команды -d:
podman run -d <имя_образа>
При запуске контейнера к его файловой системе может быть примонтирован каталог из файловой системы хост-машины. Для это используется опция --mount, например:
podman run --mount type=bind,source=<монтируемый_каталог>,target=<точка_монтирования> <имя_образа>

Получение списка запущенных и сохраненных контейнеров

Для получения списка запущенных (работающих) контейнеров используется docker-команда ps:

podman ps
Для получения списка всех контейнеров (в том числе завершивших работу) используется опция -a:
podman ps -a

Пример вывода команды:
CONTAINER ID  IMAGE                                      COMMAND     CREATED         STATUS                    PORTS       NAMES
0468d9f62e2d  registry.astralinux.ru/library/alse:1.7.4  /bin/bash   12 seconds ago  Exited (0) 5 seconds ago              priceless_hertz

Далее для идентификации контейнеров используются либо их числовые идентификаторы (CONTAINER ID) либо имена (NAMES).

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

Для запуска сохраненного контейнера используется podman-команда start, например:

podman start <идентификатор_контейнера>
Остановка контейнера

Для остановки контейнера используется podman-команда stop:

podman stop <идентификатор_контейнера>

Удаление контейнера

Перед удалением контейнер должен быть остановлен.

Команда:

podman rm <идентификатор_контейнера>

Получение информации о контейнере, журналов контейнера, статистики работы контейнеров

Получение полной информации о контейнере:

podman inspect <идентификатор_контейнера>
Эта команда выдает значительный объем информации, сократить который можно с помощью опции --format. Например, получить только сетевой адрес контейнера:
podman inspect <идентификатор_контейнера> --format '{{.NetworkSettings.IPAddress}}'
Для получения журналов контейнера используется podman-команда logs:
podman logs <идентификатор_контейнера>
Для получения статистики работы контейнеров используется podman-команда stats:
podman stats
Эта команда после запуска не завершает свою работу, а выводит статистику с заданным интервалом (по-умолчанию - 5 секунд). Для однократного вывода статистики с последующим завершением работы использовать опцию --no-stream:
podman stats --no-stream

Удаление образа

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

Команда:

podman rmi <идентификатор_образа>

Создание собственного контейнера из существующего образа

  1. Создать dockerfile с указанием образа, из которого будет создаваться контейнер (образ registry.astralinux.ru/library/alse:1.7.4) и команд для его создания (команда mkdir /testdir и команда echo test > /testdir/testfile):

    echo -e "FROM registry.astralinux.ru/library/alse:1.7.4\nRUN mkdir /testdir\nRUN echo test > /testdir/testfile" > Dockerfile

  2. Создать контейнер:

    podman --runtime=runc --cgroup-manager=cgroupfs build -t testbuild .

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

Для создания собственных образов можно использовать модифицированный сценарий из статьи Создание Docker-образов Astra Linux, заменив в нем команды docker на команды podman:

Для применения сценария требуется установить пакет debootstrap:

sudo apt install debootstrap

Сценарий использует переменные окружения:

  • REPO — репозиторий, из которого будет собираться образ debootstrap (по умолчанию — https://dl.astralinux.ru/astra/stable/orel/repository);
  • IMAGE — имя создаваемого образа (по умолчанию - astra_linux_ce_2.12);
  • ROOTFS_IMAGE — имя промежуточного образа (по умолчанию - <имя_создаваемого_образа>-rootfs);
  • CODENAME — имя дистрибутива (по умолчанию — orel).

Пример сценария:

#!/bin/sh
if [ -z $REPO ]; then
    REPO="https://dl.astralinux.ru/astra/stable/orel/repository"
fi
set -e

IMAGE="${IMAGE:-astra_linux_ce_2.12}"
ROOTFS_IMAGE="$IMAGE-rootfs"
CODENAME="${CODENAME:-orel}"

TMPDIR=`mktemp -d`
cd $TMPDIR

cleanup() {
    cd $HOME
# debootstrap leaves mounted /proc and /sys folders in chroot when terminated by Ctrl-C
    sudo umount $TMPDIR/proc $TMPDIR/sys 2>&1 >/dev/null || true
# Delete temporary data at exit
    sudo rm -rf $TMPDIR
}
trap cleanup EXIT
sudo -E debootstrap --no-check-gpg --variant=minbase --include=apt-transport-https,ca-certificates \
--components=main,contrib,non-free "$CODENAME" ./chroot "$REPO"
trap - EXIT
echo "deb $REPO $CODENAME contrib main non-free" | sudo tee ./chroot/etc/apt/sources.list
podman rmi "$ROOTFS_IMAGE" || true
sudo tar -C chroot -c . | podman import - "$ROOTFS_IMAGE"
podman rmi "$IMAGE" || true
podman --runtime=runc --cgroup-manager=cgroupfs build --network=host --no-cache=true -t "$IMAGE" - <<EOF
FROM $ROOTFS_IMAGE
ENV TERM xterm-256color
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
WORKDIR /
CMD bash
EOF

printf 'podman image `%s` has been generated\n' "$IMAGE"
exit 0

Пример запуска сценария для создания образа Astra Linux Special Edition 1.7 из Интернет-репозитория (предполагается, что сценарий сохранен в файле build.sh):

REPO="https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main" IMAGE="alse1.7" CODENAME="1.7_x86-64" bash build.sh
Успешное создание образа завершается сообщением:

podman image `alse1.7` has been generated

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

Создание собственного репозитория образов с помощью пакета docker-registry

Так как репозитории образов podman совместимы с репозиториями образов docker для создания собственного репозитория можно использовать пакет docker-registry, входящий в состав базового репозитория. Настройка клиентского подключения к такому репозиторию описана выше. Установить пакет можно командой:

sudo apt install docker-registry
При установке пакета:

  • создается служебный пользователь docker-registry, от имени которого работает служба;
  • создается каталог для размещения репозитория (/var/lib/docker-registry/);
  • создается конфигурационный файл /etc/docker/registry/config.yml со следующим содержимым:

    version: 0.1
    log:
      fields:
        service: registry
    storage:
      cache:
        blobdescriptor: inmemory
      filesystem:
        rootdirectory: /var/lib/docker-registry
      delete:
        enabled: true
    http:
      addr: :5000
      headers:
        X-Content-Type-Options: [nosniff]
    auth:
      htpasswd:
        realm: basic-realm
        path: /etc/docker/registry
    health:
      storagedriver:
        enabled: true
        interval: 10s
        threshold: 3 

По при этом регистр (служба репозитория) работает со следующими параметрами:

  • подключение к службе возможно через IP-порт 5000 внешних сетевых интерфейсов;
  • используется протокол HTTP;
  • используется базовая аутентификация пользователей (т.е вход по имени и паролю).

Описание конфигурационного файла доступно в каталоге /usr/share/doc/docker-registry/ после установки пакета docker-registry.

Для того, чтобы podman работал с используемым по умолчанию протоколом HTTP (вместо HTTPS) следует обозначить репозиторий как "небезопасный", для чего в конфигурационный файл /etc/containers/registries.conf добавить секцию описания репозитория с параметром insecure, например:

[[registry]]
location = "localhost:5000"
insecure = true



Для полного отключения аутентификации (предоставления анонимного доступа к репозиторию) следует:

  1. Удалить из конфигурационного файла секцию:

    auth:
      htpasswd:
        realm: basic-realm
        path: /etc/docker/registry
  2. Перезапустить службу docker-registry:

    sudo systemctl restart docker-registry

Для настройки базовой аутентификации (аутентификации по паролю):

  1. Установить пакет apache2-utils из базового репозитория:

    sudo apt install apache2-utils

  2. Создать файл для хранения паролей, например, файл /etc/docker/registry-pass:

    sudo touch /etc/docker/registry-pass

  3. Ограничить права доступа к этому файлу, предоставив при этом право чтения служебному пользователю docker-registry :

    sudo chmod 640 /etc/docker/registry-pass
    sudo setfacl -m u:docker-registry:r /etc/docker/registry-pass

  4. В конфигурационном файле /etc/docker/registry/config.yml указать путь к созданному файлу с паролями (/etc/docker/registry-pass) в блоке auth:htpasswd:path:

    auth:
      htpasswd:
        realm: basic-realm
        path: /etc/docker/registry-pass
  5. Перезапустить службу docker-registry:

    sudo systemctl restart docker-registry

  6. Для каждого пользователя репозитория выполнить команду (добавлять пользователей можно по мере необходимости):

    sudo htpasswd -B -b /etc/docker/registry-pass <имя> <пароль>
    Опция -B указывает способ построения хеша пароля (bcrypt).
    Опция -b позволяет указать пароль в командной строке, что может быть небезопасно. Если ее не использовать, то пароль будет запрошен в интерактивном режиме.

Создание собственного репозитория образов собственными средствами podman

Материал находится в разработке.

(Статья по ссылке устарела и применима частично https://thenewstack.io/tutorial-host-a-local-podman-image-registry/).

Загрузка образа в репозиторий

Предположим, что:

  • ранее установлен пакет docker-registry и, соответственно запущена служба локального репозитория образов;
  • служба использует IP-порт 5000;
  • для упрощения принимается, что в службе настроен анонимный доступ;
  • имеется ранее созданный пользовательский образ localhost/alse1.7.

Для загрузки образа:

  1. Создать новый тег образа, соответствующий имени репозитория, в который будет выполняться загрузка:

    podman tag alse1.7 localhost:5000/alse1.7

  2. Опционально убедиться, что тег создался:

    podman images

    REPOSITORY                            TAG         IMAGE ID      CREATED       SIZE
    localhost/alse1.7                     latest      8359adc98b69  2 hours ago   209 MB
    localhost:5000/alse1.7                latest      8359adc98b69  2 hours ago   209 MB

  3. Загрузить "тегированный" образ в репозиторий:

    podman push localhost:5000/alse1.7

    Getting image source signatures
    Copying blob e5a6e1aacdde done  
    Copying blob 39122d40d697 done  
    Copying config 8359adc98b done  
    Writing manifest to image destination
    Storing signatures

  4. Опционально убедиться, что образ загружен:

    podman search localhost:5000/alse

    NAME                    DESCRIPTION
    localhost:5000/alse1.7
    Образ также будет доступен по внешнему сетевому IP-адресу (в примере ниже - 10.107.0.227):
    podman search 10.107.0.227:5000/alse

    NAME                       DESCRIPTION
    10.107.0.227:5000/alse1.7 


Оркестрация контейнеров (работа с подами)

Создание нового пода

Создание нового пода:

podman --cgroup-manager cgroupfs pod create <имя_пода>

При создании пода:

  • если имя пода не задано то используется случайно сгенерированное имя;
  • генерируется полный идентификатор (выводится на экран при успешном создании пода);
  • в поде создается служебный контейнер (так называемый infra-контейнер), для чего загружается специальный образ podman-pause. Этот контейнер не выполняет никаких функций, а используется для резервирования места для пода в пространстве имен. Это позволяет в дальнейшем подключать к поду другие (функциональные) контейнеры.

В дальнейшем поды идентифицируются именами или идентификаторами - полным идентификатором, или кратким (первые символы полного идентификатора).

Список существующих подов

Проверить список подов можно командой:

podman pod ps
пример вывода команды:

POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
312fb1c5553f  testpod     Created     22 minutes ago  76972a488dbb  1

Команда отображает краткий идентификатор пода (POD ID, для отображения полных идентификаторов использовать опцию --no-trunc), имя пода (NAME), а также идентификатор infra-контейнера (INFRA ID). Количество контейнеров (# OF CONTAINERS) в новом поде всегда один — это служебный infra-контейнер. Статус пода  (STATUS) может иметь следующие значения:

  • Created — в поде нет исполняющихся или остановленных контейнеров;
  • Running — хотя бы один контейнер исполняется;
  • Stopped — исполняющихся контейнеров нет, есть хотя бы один остановленный;
  • Exited — все контейнеры остановлены.
  • Dead — ошибка получения статуса.

Получить имена контейнеров в подах можно командой:

podman pod ps --ctr-names 
Пример вывода команды:

POD ID        NAME        STATUS      CREATED         INFRA ID      NAMES
312fb1c5553f  testpod     Created     56 minutes ago  76972a488dbb  friendly_rhodes,312fb1c5553f-infra,brave_turing

Имена контейнеров перечислены в столбце NAMES через запятую.

Добавление контейнера в под

Для добавления контейнеров в под используются podman-команды создания и запуска контейнеров с опцией --pod=<идентификатор_пода>, например:

podman create --pod=testpod nginx

Управление подами

Команды для управления подами:

Команда

Справочная страница

Description

clone

podman-pod-clone(1)

Создать копию существующего пода.

create

podman-pod-create(1)

Создать новый под.

exists

podman-pod-exists(1)

Проверить, существует ли под в локальном хранилище.

inspect

podman-pod-inspect(1)

Получить описание пода.

kill

podman-pod-kill(1)

Прекратить основной процесс в одном или нескольких подах.

logs

podman-pod-logs(1)

Получить журналы пода для одного или нескольких контейнеров.

pause

podman-pod-pause(1)

Приостановить один или несколько подов.

prune

podman-pod-prune(1)

Удалить все остановленные поды и их контейнеры.

ps

podman-pod-ps(1)

Получить список подов.

restart

podman-pod-restart(1)

Перезапустить один или несколько подов.

rm

podman-pod-rm(1)

Удалить один или несколько остановленных подов.

start

podman-pod-start(1)

Запустить один или несколько подов.

stats

podman-pod-stats(1)

Получить статистику использования ресурсов одного или нескольких подов.

stop

podman-pod-stop(1)

Остановить один или несколько подов.

top

podman-pod-top(1)

Получить список исполняющихся процессов в контейнерах пода.

unpause

podman-pod-unpause(1)

Запустить приостановленные один или несколько подов.

Особенности работы в Astra Linux Special Edition

Выполнение команд podman от имени других учетных записей

Выполнение команд podman с нулевой меткой безопасности от имени других учетных записей

Для выполнения команд podman от имени других учетных записей можно использовать конструкцию:

sudo -u <имя_пользователя> -H -i podman <podman-команда>
Где:

  • -u <имя_пользователя> — опция, определяющая от имени какого пользователя (целевого пользователя) будет выполнена команда;
  • -H — опция, присваивающая переменной HOME значение домашнего каталоге целевого пользователя;
  • -i — опция, обеспечивающая перед выполнением команды переход в домашний каталог целевого пользователя.

Выполнение команд podman с ненулевой меткой безопасности от имени других учетных записей

Для присвоения ненулевой метки безопасности используется команда pdp-exec:

sudo pdp-exec -u macuser -l "1:0:0:0" -- bash -c 'HOME=/home/.pdp/macuser/l1i0c0x0t0x0 ; TMP=/var/private/tmp/l1i0c0x0t0x0 ; cd $HOME ; podman images'

  • Нет меток