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

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

Ключ

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

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) , РУСБ.10015-37 (очередное обновление 7.7), c установленным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) с подключенным расширенным  репозиторием;
  • Astra Linux Special Edition РУСБ.10015-10 c установленным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) с подключенным расширенным репозиторием;
  • Astra Linux Special Edition РУСБ.10015-17 с подключенным расширенным репозиторием.
Предупреждение
titleВнимание!
Программное обеспечение расширенного репозитория является сторонним по отношению к Astra Linux, не дорабатывается с точки зрения выполнения требований по безопасности информации и не проверяется при сертификацииИспользование стороннего программного обеспечения в аттестованных информационных системах, функционирующих под управлением
  • .
Подробнее см.
  • Astra Linux Special Edition
.



Предупреждение
titleВнимание!

Программное обеспечение расширенного репозитория является сторонним по отношению к 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 или из командной строки командой:

Command
sudo apt install podman

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

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

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

Command
podman <опции> <podman-команда>

Где:

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

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

Command
podman --help

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

Блок кода
collapsetrue
Manage pods, containers and images

Usage:
  podman [options] [command]

Available Commands:
  attach      Attach to a running container
  auto-update Auto update containers according 

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

Введение

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

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

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

Термины

Терминология podman совпадает с терминологией docker, см. Применение системы изоляции приложений docker в ОС Astra Linux Special Edition 1.7.

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

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

Установка

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

Command
sudo apt install podman

Дополнительно сразу можно установить пакет crun, который может использоваться в качестве альтернативного средства контейнеризации.

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

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

Command
podman <опции> <podman-команда>

Где:

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

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

Command
podman --help

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

Блок кода
collapsetrue
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 справка может быть получена командой:

Command
man podman-attach

А для команды podman create — командой:

Command
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:

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

например:

Command
podman login repo:5000

Команда запрашивает имя и пароль, и сохраняет их в формате, пригодном для использования следующими командами.

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

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


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

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

Command

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:

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

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

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

Command

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

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

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

Для поиска образов в репозиториях используется podman-команда search.

Информация
Репозиторий registry.astralinux.ru возможность поиска не поддерживает.

Репозиторий, в котором должен выполняться поиск, может быть указан в аргументе команды как префикс шаблона для поиска. Например, поиск шаблона nginx в репозитории образов docker.io:

Command

podman search docker.io/nginx

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

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

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

ЯкорьclientclientТакже можно задать репозитории для поиска по полным именам. Эти параметры должны располагаться в конфигурационном файле после параметра 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:

Command
man containers-redistries.conf

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

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

Command

podman images

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

"{{.Registries}}"

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

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

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

Command

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

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

Блок кода
collapsetrue
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']

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

Якорь
client
client
Также можно задать репозитории для поиска по полным именам. Эти параметры должны располагаться в конфигурационном файле после параметра 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:

Command
man containers-redistries.conf

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

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

Command

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, например:

Command

podman run -it --rm registry.astralinux.ru/library/alse:1.7.4 /bin/bash

Для запуска контейнера в фоновом режиме используется опция podman-команды -d:

Command

podman run -d <имя_образа>

При запуске контейнера к его файловой системе может быть примонтирован каталог из файловой системы хост-машины. Для это используется опция --mount, например:

Command

podman run --mount type=bind,source=<монтируемый_каталог>,target=<точка_монтирования> <имя_образа>

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

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

Command

podman ps

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

Command

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, например:

Command

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

Остановка контейнера

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

Command

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

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

Информация

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

Команда:

Command

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

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

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

Command

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

Эта команда выдает значительный объем информации, сократить который можно с помощью опции --format. Например, получить только сетевой адрес контейнера:

Command

podman inspect <идентификатор_контейнера> --format '{{.NetworkSettings.IPAddress}}'

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

Command

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

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

Command

podman stats

Эта команда после запуска не завершает свою работу, а выводит статистику с заданным интервалом (по-умолчанию - 5 секунд). Для однократного вывода статистики с последующим завершением работы использовать опцию --no-stream:

Command

podman stats --no-stream

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

Информация

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

Команда:

Command

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


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

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

    Command
    echo -e "FROM
Блок кодаREPOSITORY TAG IMAGE ID CREATED SIZE
  1. registry.astralinux.ru/library/alse
  1. :1.7.4
557b8fe356eb 7 weeks ago 98.4 MB

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

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

Command

podman run -it --rm registry.astralinux.ru/library/alse:1.7.4 /bin/bash

Для запуска контейнера в фоновом режиме используется опция podman-команды -d:

Command

podman run -d <имя_образа>

При запуске контейнера к его файловой системе может быть примонтирован каталог из файловой системы хост-машины. Для это используется опция --mount, например:

Command

podman run --mount type=bind,source=<монтируемый_каталог>,target=<точка_монтирования> <имя_образа>

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

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

Command

podman ps

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

Command

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, например:

Command

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

Остановка контейнера

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

Command

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

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

Информация

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

Команда:

Command

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

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

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

Command

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

Эта команда выдает значительный объем информации, сократить который можно с помощью опции --format. Например, получить только сетевой адрес контейнера:

Command

podman inspect <идентификатор_контейнера> --format '{{.NetworkSettings.IPAddress}}'

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

Command

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

  1. \nRUN mkdir /testdir\nRUN echo test > /testdir/testfile" > Dockerfile


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

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


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

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

Информация

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

Command
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):

Command

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

Command

podman stats

Эта команда после запуска не завершает свою работу, а выводит статистику с заданным интервалом (по-умолчанию - 5 секунд). Для однократного вывода статистики с последующим завершением работы использовать опцию --no-stream:

Command

podman stats --no-stream

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

Информация

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

Команда:

Command

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

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

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

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

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

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

Информация
Command
sudo apt install debootstrap
Блок кода#!/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" 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 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

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
docker-registry
Создание собственного репозитория образов с помощью пакета docker-registry

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

Command
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


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

Запустим:

# ./build.sh

...

podman image `astra_linux_ce_2.12` has been generated
umount: /tmp/tmp.b6LT9fyry0/proc: no mount point specified.
umount: /tmp/tmp.b6LT9fyry0/sys: no mount point specified.
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/astra_linux_ce_2.12 latest 50c61172d57c 9 seconds ago 218 MB
# podman run -ti astra_linux_ce_2.12 bash
root@9145be5d7e9e:/# cat /etc/astra_version
CE 2.12.44 (orel)

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

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

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

Command
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]
    1. Установить пакет apache2-utils из базового репозитория:

      Command
      sudo apt install apache2-utils


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

      Command
      sudo touch /etc/docker/registry-pass


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

      Command

      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:

      Блок кода
    1. 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/ после установки пакета dicker-registry.

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

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

    Блок кода
    auth:
      htpasswd:
        realm: basic-realm
        path: /etc/docker/registry

    Перезапустить службу docker-registry:

    Блок кода
    sudo systemctl restart docker-registry

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

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

    Command
    sudo apt install apache2-utils

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

    Command
    sudo touch /etc/docker/registry-pass

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

    Command

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

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

    Блок кода
    auth:
      htpasswd:
        realm: basic-realm
        path: /etc/docker/registry-pass

    Перезапустить службу docker-registry:

    Command
    sudo systemctl restart docker-registry
  • Для каждого пользователя репозитория выполнить команду (добавлять пользователей можно по мере необходимости):

    Command
    sudo htpasswd -B -b /etc/docker/registry-pass <имя> <пароль>

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

    1. registry-pass


    2. Перезапустить службу docker-registry:

      Command
      sudo systemctl restart docker-registry


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

      Command
      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. Создать новый тег образа, соответствующий имени репозитория, в который будет выполняться загрузка:

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


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

      Command
      Titlepodman 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. Загрузить "тегированный" образ в репозиторий:

      Command
      Titlepodman 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. Опционально убедиться, что образ загружен:

      Command
      Titlepodman search localhost:5000/alse
      NAME                    DESCRIPTION
      localhost:5000/alse1.7

      Образ также будет доступен по внешнему сетевому IP-адресу (в примере ниже - 10.107.0.227):

      Command
      Titlepodman search 10.107.0.227:5000/alse
      NAME                       DESCRIPTION
      10.107.0.227:5000/alse1.7 



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

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

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

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

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

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

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

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

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

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

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

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

    Command
    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 — ошибка получения статуса.

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

    Command
    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=<идентификатор_пода>, например:

    Command
    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)

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

    в контейнерах пода.

    unpause

    podman-pod-unpause(1)

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


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

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

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

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

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

    Где:

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

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

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

    Command
    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'

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

    Работа в сессии SSH

    Работа с включенным МКЦ

    Запуск контейнера от имени высокоцелостного пользователя

    Запуск контейнера от имени низкоцелостного пользователя

    Контроль уязвимостей в контейнерах