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

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 3 Следующий »

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

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-37 (очередное обновление 7.7), РУСБ.10015-10 c установленным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2) с подключенным расширенным репозиторием;
  • Astra Linux Special Edition РУСБ.10015-17 с подключенным расширенным репозиторием.

Введение

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

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

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

Термины

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

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

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

Установка

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

sudo apt install podman

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

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

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

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

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

Стандартные команды 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

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

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

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

podman pull <имя_образа>
Или, как и в docker, поиск и загрузка образа могут быть выполнены одной командой запуска контейнера (run), например загрузка образа и запуск контейнера Astra Linux Special Edition 1.7.4 из репозитория registry.astralinux.ru:
podman run -it --rm registry.astralinux.ru/library/alse:1.7.4 /bin/bash

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

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

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

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

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

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

unqualified-search-registries = [ 'registry.redhat.io', 'docker.io']

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

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

Список загруженных образов можно получить 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 <идентификатор_образа>

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

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:

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

Запустим:



# ./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)



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

https://thenewstack.io/tutorial-host-a-local-podman-image-registry/

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


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

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

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

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

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

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

  • Нет меток