Работа с реестрами контейнеров#

Реестр образов контейнеров — это репозиторий или коллекция репозиториев для хранения образов контейнеров и артефактов приложений на их основе. Файл /etc/containers/registries.conf - общесистемный конфигурационный файл, содержащий реестры образов контейнеров, которые могут использоваться различными контейнерными инструментами.

Если образ контейнера, предоставленный инструменту контейнеризации, не полностью определен, то инструмент обращается к файлу registries.conf. В нем можно указать псевдонимы для коротких имен, предоставляя пользователям с административными полномочиями полный доступ, откуда извлекаются образы, если они не соответствуют полным требованиям.

Например, команда postman pull example.ru/example_image извлекает образ контейнера из реестра example.ru в пользовательскую локальную систему, как указано в файле registries.conf.

Реестры контейнеров#

Реестр контейнеров — это репозиторий или набор репозиториев для хранения образов контейнеров и артефактов приложений на основе контейнеров.

Чтобы загрузить образы контейнеров из удаленного реестра и добавить их в свою локальную систему, используйте команду podman pull:

podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

Где <registry>[:<port>]/[<namespace>/]<name>:<tag> - это имя образа контейнера.

Например, образ контейнера example.registry.ru/ubi9/ubi идентифицируется с помощью:

  • Серверов реестра (example.registry.ru);

  • Namespace (ubi9);

  • Имени образа (ubi).

Если существует несколько версий одного и того же образа, добавьте тег, чтобы конкретно указать на его имя. По умолчанию Podman использует тег :latest, например ubi9/ubi:latest.

Некоторые реестры также используют namespace для разделения образов с одинаковыми \<name>, принадлежащих разным пользователям или организациям. Например:

Namespace

Примеры (\<namespace>/\<name>)

Организация

sberlinux/dropapp

Логин (имя пользователя)

tanya/application, sasha/application

Роль

devel/database, test/database, prod/database

Настройка реестров контейнеров#

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

podman info -f json | jq '.registries["search"]'

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

[
  "registry.access.example.ru",
  "example.registry.io"
]

Редактирование списка реестров доступно в файле конфигурации registries.conf. От имени пользователя с полномочиями администратора отредактируйте файл /etc/containers/registries.conf, чтобы изменить базовые настройки общесистемного поиска.

От имени пользователя без административных полномочий создайте файл $HOME/.config/containers/registries.conf, чтобы переопределить общесистемные настройки.

unqualified-search-registries = ["registry.access...", "registry..."]
short-name-mode = "enforcing"

По умолчанию команды podman pull и podman search выполняют поиск образов контейнеров из реестров, перечисленных в списке unqualified-search-registries, в указанном порядке.

Настройка локального реестра контейнеров#

Можно настроить локальный реестр контейнеров без проверки TLS. Существует два варианта отключения проверки:

  1. Ипользование параметра --tls-verify=false в Podman;

  2. Внесение значения insecure=true в файле registries.conf:

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

Ограничение доступа к реестру, namespace или образу#

Реализована возможность выбора реестров, к которым можно запретить доступ локальной системы. Чтобы ограничить определенный реестр, установите значение blocked=true:

[[registry]]
location = "registry.example.org"
blocked = true

Также можно ограничить namespace, установив значение префикса: prefix="registry.example.org/namespace".

Например, извлечение образа с помощью команды podman pull registry.example.org/example/image:latest заблокируется, поскольку совпадет с префиксом:

[[registry]]
location = "registry.example.org"
prefix="registry.example.org/namespace"
blocked = true

Примечание

Опция prefix опциональна, поскольку ее значение по умолчанию совпадает со значением location.

Можно ограничить определенный образ при помощи prefix="registry.example.org/namespace/image":

[[registry]]
location = "registry.example.org"
prefix="registry.example.org/namespace/image"
blocked = true

Зеркалирование реестров#

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

Например, при запуске команда podman pull registry.example.ru/myimage:latest сначала пытается обратится к mirror-1.com, затем к mirror-2.com:

[[registry]]
location="registry.example.ru"
[[registry.mirror]]
location="mirror-1.ru"
[[registry.mirror]]
location="mirror-2.ru"

Поиск образов контейнеров#

С помощью команды podman search можно выполнить поиск образов в выбранных реестрах контейнеров.

Примечание

Команда podman search - ненадежный способ определения наличия образа. Поведение podman search зависит от реализации каждого реестра. Некоторые реестры могут не поддерживать поиск. Поиск без поискового запроса работает только для реестров, реализующих API версии 2.

Для поиска образов image-1 в реестре registry.io убедитесь, что реестр настроен, и выполните следующие действия:

  1. Пройдите аутентификацию в реестре:

    podman login registry.io
    
  2. Выполните поиск образа:

    • Для поиска определенного образа в определенном реестре введите:

      podman search registry.io/image-1
      

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

      INDEX       NAME                                           DESCRIPTION           STARS   OFFICIAL   AUTOMATED
      DESCRIPTION           STARS   OFFICIAL   AUTOMATED
      example.ru   registry.sberlinux/slo9/image-1        This container image ...  0
      example.ru   registry.sberlinux/slc/image-1-slo8   <Image> is an  ...     0
      
    • Или отобразите все образы, предоставленные определенным реестром:

      podman search registry.io/
      
    • Для поиска имени образа во всех реестрах введите:

      podman search image-1
      

    Чтобы вывести детальные описания, добавьте параметр --no-trunc.

Извлечение образов из реестров#

Используйте команду podman pull для загрузки образа в пользовательскую локальную систему.

  1. Войдите в реестр:

    podman login registry...
    

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

    Username: <username>
    Password: <password>
    Login Succeeded!
    
  2. Извлеките образ контейнера:

    podman pull registry.../ubi9/ubi
    
  3. Выведите список всех образов, загруженных в пользовательскую локальную систему:

    podman images
    

    Вывод должен отображать следующие значения:

    REPOSITORY                           TAG     IMAGE ID      CREATED      SIZE
    registry.../ubi9/ubi          latest  3269c37eae33  7 weeks ago  208 MB
    

Настройка псевдонимов для коротких имен#

Рекомендуется всегда извлекать образы по его полному имени. Однако традиционно используются короткие имена. Например, можно ввести ubi9 вместо registry.../ubi9:latest.

Файл registries.conf позволяет указывать псевдонимы для коротких имен, предоставляя пользователям с административными полномочиями полный контроль над тем, откуда извлекаются образы. Псевдонимы указываются в таблице [aliases] в форме "name" = "value". Списки псевдонимов располагаются в каталоге /etc/containers/registries.conf.d.

Например:

unqualified-search-registries=["registry.example.ru", “registry.io"]

[aliases]
"example-1"="registry.example.ru/example-1"

Режимы коротких имен#

Режим enforcing запускается, если во время извлечения образа не найден подходящий псевдоним. Podman предлагает пользователю выбрать один из реестров с неквалифицированным поиском. Если выбранный образ извлечен успешно, Podman автоматически записывает новый псевдоним с коротким именем в файл $HOME/.cache/containers/short-name-aliases.conf (для пользователей без административных полномочий) или в /var/cache/containers/short-name-aliases.conf (для пользователей с административными полномочиями). Если не удается получить запрос, Podman выдаст ошибку.

Важно

Обратите внимание, что файл short-name-aliases.conf имеет приоритет над файлом registries.conf, если в обоих указан одинаковый псевдоним.

Режим permissive действует анологично с enforcing, но Podman не выдает ошибку, если пользователю не удается получить запрос. Вместо этого он делает запрос во все реестры с неквалифицированным поиском в указанном порядке. Обратите внимание, что псевдоним не записывается.

В режиме disabled все реестры с неквалифицированным поиском проверяются в заданном порядке и псевдонимы не записываются.