Product SiteDocumentation Site

Глава 12. Контейнеры и OCI-реестры

12.1. Podman
12.1.1. Установка и настройка Podman
12.1.2. Тестовый запуск nginx
12.1.3. Работа с подами
12.2. Buildah: специфичная сборка контейнерных образов
12.2.1. Установка
12.2.2. Основные команды
12.2.3. Сборка из Dockerfile
12.2.4. Ручная (скриптовая) сборка
12.2.5. Отладка и инспекция
12.3. ALTLinux Container Registry
12.4. Zot: базовый функционал
12.4.1. Установка и запуск
12.4.2. Работа с образами
12.4.3. Аутентификация и авторизация
12.4.4. Зеркалирование OCI-реестров с помощью Zot
12.5. regclient: работа с реестрами образов
12.5.1. Установка
12.5.2. Основные команды
12.5.3. Настройка доступа
12.5.4. Работа с regclient
12.6. crane: модификация и управление OCI/Docker-образами
12.6.1. Установка
12.6.2. Основные команды
12.6.3. Работа с crane
12.7. Сканер уязвимостей Trivy
12.7.1. Установка
12.7.2. Использование
12.7.3. Примеры использования
12.7.4. Клиент/сервер
12.7.5. Локальная база данных Trivy
Современная разработка и эксплуатация программного обеспечения всё чаще опираются на контейнеризацию. Контейнерные образы позволяют стандартизировать окружение приложений, упростить их доставку и обеспечить воспроизводимость развертывания.
В данной главе рассматривается набор инструментов для работы с контейнерными образами и OCI-совместимыми реестрами. Описываются как базовые операции (сборка, запуск, публикация образов), так и более продвинутые сценарии — зеркалирование, модификация, анализ уязвимостей и управление метаданными.

12.1. Podman

Podman — инструмент для управления контейнерами и группами контейнеров (подами), совместимый с Docker CLI и Docker-образами. Podman позволяет запускать контейнеры без демонa (daemonless) и поддерживает rootless-режим для повышения безопасности.
Основные возможности Podman:
  • запуск и управление отдельными контейнерами и подами (группами контейнеров, которые разделяют сетевое пространство имён и другие ресурсы);
  • поддержка Docker-совместимых команд и образов;
  • rootless-режим (работа без прав суперпользователя);
  • отсутствие необходимости в постоянно работающем демоне, что упрощает интеграцию с systemd и CI/CD.

12.1.1. Установка и настройка Podman

Установка пакета:
# apt-get install podman
Проверка версии установленного пакета:
# podman --version
podman version 5.7.0

12.1.1.1. Настройка rootless-режима

Для работы с Podman в rootless-режиме необходимо выполнить ряд дополнительных действий:
  1. Убедитесь, что разрешено создание пользовательских пространств имён:
    # sysctl kernel.unprivileged_userns_clone
    kernel.unprivileged_userns_clone = 0
    
    Если значение 0, установите пакет:
    # apt-get install sysctl-conf-userns
    
  2. Предоставьте пользователям право запуска исполняемых файлов /usr/bin/newuidmap и /usr/bin/newgidmap:
    # control newgidmap public
    # control newuidmap public
    

12.1.1.2. Основные команды для работы с Podman

Таблица 12.1. Основные команды

Действие
Команда
Список контейнеров
podman ps
Создание контейнера
podman create [опции] imageName
Запуск контейнера
podman start containerID
Остановка контейнера
podman stop containerID
Принудительное завершение
podman kill containerID
Перезапуск
podman restart containerID
Просмотр логов контейнера
podman logs containerID
Выполнение команды в контейнере
podman exec [опции] containerID command
Информация о контейнере
podman inspect containerID
Список образов
podman images
Сборка образа
podman build -t imageName .
Загрузка образа в репозиторий
podman push imageName
Загрузка образа из репозитория
podman pull imageName
Удаление образа
podman rmi imageName
Запуск из YAML
podman play kube file.yaml
Примеры:
  • запуск контейнера ALT:
    $ podman run registry.altlinux.org/alt/alt:p11 uname -a
    Trying to pull registry.altlinux.org/alt/alt:p11...
    Getting image source signatures
    Copying blob 8d382247a69f done   |
    Copying blob c549b474d68c done   |
    Copying config 97c70e35e5 done   |
    Writing manifest to image destination
    Linux 0985c00c38ea 6.12.63-6.12-alt1 #1 SMP PREEMPT_DYNAMIC Tue Dec 30 19:10:41 UTC 2025 x86_64 GNU/Linux
    
  • список образов:
    $ podman images
    REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
    registry.altlinux.org/alt/alt  p11         97c70e35e575  7 months ago  125 MB
    

12.1.1.3. Настройка сети

Podman автоматически создает сеть, однако при необходимости можно создать дополнительную:
$ podman network create my-network
Список сетей:
$ podman network ls
NETWORK ID    NAME        DRIVER
fcb565985cc6  my-network  bridge
2f259bab93aa  podman      bridge
Информация о сети:
$ podman network inspect my-network

12.1.2. Тестовый запуск nginx

Запуск контейнера с nginx:
$ podman run -d --name nginx --network my-network -p 8081:80 registry.altlinux.org/p11/nginx
9f65b8ed6971b34f65a586800852ce695ac61176a54f318d610dacae0e5d6ce6
где:
  • -d — запуск в фоновом режиме;
  • --name — имя контейнера;
  • --network — используемая сеть;
  • -p — сопоставление порта хоста с портом контейнера (например, 8081:80 означает: порт 8081 на хосте → порт 80 в контейнере);
  • registry.altlinux.org/p11/nginx — адрес образа.
Список запущенных контейнеров:
$ podman ps
CONTAINER ID  IMAGE               COMMAND               CREATED        STATUS        PORTS                 NAMES
9f65b8ed6971  registry.altlinux…  nginx -g daemon o...  7 minutes ago  Up 7 minutes  0.0.0.0:8081->80/tcp  nginx
Проверить работу nginx можно, выполнив запрос (сервер должен вернуть код 200):
$ curl -I <ip_адрес>:<порт>
где:
  • <ip адрес> — IP-адрес узла, на котором запущен контейнер;
  • <порт> — порт хоста, указанный через -p при создании контейнера.
В данном случае возможна команда:
$ curl -I 192.168.0.102:8081
HTTP/1.1 200 OK
Server: nginx/1.28.1
Date: Tue, 17 Feb 2026 11:23:03 GMT
…

12.1.3. Работа с подами

Создание пода:
$ podman pod create --name my-pod --network my-network -p 8081:80
Список подов:
$ podman pod ls
POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
394308217ce0  my-pod      Created     12 seconds ago  286d0da0f2dc  1
Добавление контейнера в под:
$ podman run -d --pod my-pod --name nginx registry.altlinux.org/p11/nginx
Контейнер с приложением nginx будет добавлен в под my-pod.
Подробная информация о поде:
$ podman pod inspect my-pod
Список контейнеров пода:
$ podman pod ps --ctr-names
POD ID        NAME        STATUS      CREATED             INFRA ID      NAMES
394308217ce0  my-pod      Running     About a minute ago  bd7dd34e327f  394308217ce0-infra,nginx
Управление подом:
  • остановить группу контейнеров:
    $ podman pod stop my-pod
    
  • запустить группу контейнеров:
    $ podman pod start my-pod
    
  • удалить группу контейнеров:
    $ podman pod rm my-pod