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

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

Извлечение образов контейнеров с использованием псевдонимов для коротких имен#

Можно использовать безопасные короткие имена, чтобы загрузить образ в пользовательскую локальную систему. Следующий сценарий описывает извлечение образа контейнера fedora и nginx.

Сценарий#

  • Для извлечения образа fedora используйте:

    podman pull fedora
    

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

    Resolved "fedora" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
    Trying to pull registry.fedoraproject.org/fedora:latest…
    ...
    Storing signatures
    ...
    

    В данном примере псевдоним найден и образ registry.fedoraproject.org/fedora безопасно извлечен. Список unqualified-search-registries не используется для получения имени образа fedora.

  • Для извлечения образа nginx используйте:

    podman pull nginx
    

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

    ? Please select an image:
    example.registry.ru/nginx:latest
    example1.registry.io/nginx:latest
        docker.io/library/nginx:latest
    ✔ docker.io/library/nginx:latest
    Trying to pull docker.io/library/nginx:latest…
    ...
    Storing signatures
    ...
    

Если соответствующие псевдонимы не найдены, будет предложено выбрать один из списка unqualified-search-registries. При успешном извлечении выбранного образа локально записывается новый псевдоним для короткого имени. В противном случае возникнет ошибка.

Проверка#

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

podman images

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

REPOSITORY                                   TAG     IMAGE ID      CREATED        SIZE
registry.fedoraproject.org/fedora            latest  28317703decd  12 days ago    184 MB
docker.io/library/nginx                      latest  08b152afcfae  13 days ago    137 MB

Получение списка образов#

Используйте команду podman images для отображения списка образов в пользовательском локальном хранилище:

podman images

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

| REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
| :--- | :--- | :--- | :--- | :--- |
| example.registry.ru/ubi9/ubi | latest | 3269c37eae33 | 6 weeks ago | 208 MB |

Просмотр локальных образов#

После загрузки и запуска образа, можно использовать команду podman inspect для его для изучения. Например, чтобы понять функции образа или проверить, какое ПО находится внутри. Команда podman inspect отображает информацию о контейнерах и образах, идентифицированных по имени или ID.

Для просмотра информации образа используйте example.example.ru/ubi9/ubi:

podman inspect example.example.ru/ubi9/ubi

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

...
 "Cmd": [
        "/bin/bash"
    ],
    "Labels": {
        "architecture": "x86_64",
        "build-date": "2020-12-10T01:59:40.343735",
        "ru.example.build-host": "cpt-1002.osbs.prod.upshift.rdu2.sberlinux.ru",
        "ru.example.component": "ubi9-container",
        "ru.example.license_terms": "https://www.example.ru/...,
    "description": "The Universal Base Image is ...
    }
...

Ключ "Cmd" задает команду запуска контейнера по умолчанию. Ее можно переопределить, указав опцию для podman run. Контейнер ubi9/ubi запустится через оболочку bash, если опции отсутствуют. Присутствие ключа "Entrypoint" заменяет значение "Cmd", а само значение "Cmd" будет использоваться в качестве опции для команды Entrypoint.

Просмотр удаленных образов#

Используйте команду scope inspect для отображения информации об образе из реестра удаленного контейнера, прежде чем загружать образ в пользовательскую систему.

Проверьте реестр образа с помощью example.registry.ru/ubi9/ubi-init:

skopeo inspect docker://example.registry.com/ubi9/ubi-init\

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

{
   "Name": "example.registry.ru/ubi9/ubi-init",
   "Digest": "sha256:c6d1e50ab...",
    "RepoTags": [
        ...
        "latest"
    ],
   "Created": "2023-12-10T07:16:37.250312Z",
    "DockerVersion": "1.13.1",
    "Labels": {
        "architecture": "x86_64",
        "build-date": "2020-12-10T07:16:11.378348",
        "ru.example.build-host": "cpt-1007.osbs.prod.upshift.rdu2.sberlinux.ru",
        "ru.example.component": "ubi9-init-container",
        "ru.example.license_terms": "https:/example.ru/en/about/example-end-user-license-agreements#UBI",
        "description": "The Universal Base Image Init is designed to run an init system as PID 1 for running multi-services inside a container
        ...
    }
}

Копирование образов контейнеров#

Можно использовать команду skopeo copy для копирования образа контейнера из одного реестра в другой. Например, заполнить внутреннее хранилище образами из внешних реестров или синхронизировать реестры образов в разных местах.

Скопируйте образ контейнера skopeo из docker://quay.io в docker://registry.example.ru:

skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.ru/skopeo:latest

Копирование слоев образа в локальный каталог#

Команда skopeo copy может использоваться для копирования слоев образа контейнера в локальный каталог.

  1. Создайте каталог /var/lib/images/nginx:

    mkdir -p /var/lib/images/nginx
    
  2. Скопируйте в нее слои из docker://docker.io/nginx:latest image:

    skopeo copy docker://docker.io/nginx:latest dir:/var/lib/images/nginx
    

Проверка#

Проверьте содержимое каталога /var/lib/images/nginx:

ls /var/lib/images/nginx

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

08b11a3d692c1a2e15ae840f2c15c18308dcb079aa5320e15d46b62015c0f6f3
...
4fcb23e29ba19bf305d0d4b35412625fea51e82292ec7312f9be724cb6e31ffd  manifest.json
version

Маркировка образов тегами#

Используйте команду podman tag, чтобы добавить дополнительное имя к локальному образу. Оно может состоять из нескольких частей: <registryhost>/<username>/<name>:<tag> (<узел реестра>/<имя пользователя>/<имя пользователя>:<тег>).

  1. Выведите список всех образов, загруженных в локальное хранилище:

    podman images
    

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

    REPOSITORY                           TAG     IMAGE ID      CREATED      SIZE
    registry.example.ru/ubi9/ubi        latest  3269c37eae33  7 weeks ago  208 MB
    
  2. Присвоите имя myubi реестру registry.example.ru/ubi9/ubi, используя один из следующих вариантов:

    • Имя образа:

      podman tag registry.example.ru/ubi9/ubi myubi
      
    • ID образа:

      podman tag 3269c37eae33 myubi
      

    Обе команды ведут к одинаковому результату.

  3. Выведите список всех образов:

    podman images
    

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

    REPOSITORY                           TAG     IMAGE ID      CREATED       SIZE
    registry.example.ru/ubi9/ubi        latest  3269c37eae33  2 months ago  208 MB
    localhost/myubi                      latest  3269c37eae33  2 months ago  208 MB
    

    Обратите внимание, что тег latest по умолчанию присутствует у обоих образов. А имена образов присвоены одному ID 3269c37eae33.

  4. Добавьте тег 9 к образу registry.example.ru/ubi9/ubi, используя один из следующих вариантов:

    • Имя образа:

      podman tag registry.example.ru/ubi9/ubi myubi9
      
    • ID образа:

      podman tag 3269c37eae33 myubi9
      

    Обе команды ведут к одинаковому результату.

  5. Выведите список всех образов:

    podman images
    

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

    REPOSITORY                           TAG     IMAGE ID      CREATED       SIZE
    registry.example.ru/ubi9/ubi        latest  3269c37eae33  2 months ago  208 MB
    localhost/myubi                      latest  3269c37eae33  2 months ago  208 MB
    localhost/myubi                      9     3269c37eae33  2 months ago  208 MB
    

    Обратите внимание, что тег latest по умолчанию присутствует у обоих образов. А имена образов присвоены одному ID 3269c37eae33.

После пометки тегом существует три варианта запуска контейнера:

  • по ID (3269c37eae33);

  • по имени (localhost/myubi:latest);

  • по имени (localhost/myubi:9).

Сохранение и загрузка образов#

Используйте команду podman save для сохранения образа в архив контейнера. Позже его можно восстановить в другой среде или отправить другому пользователю. Для указания формата архива используйте опцию --format.

Поддерживаемые форматы:

  • docker-archive;

  • oci-archive;

  • oci-dir (каталог с типом манифеста oci);

  • docker-dir (каталог с типом манифеста v2s2) - формат по умолчанию.

Используйте команду podman load, чтобы загрузить образ из архива образов контейнера в хранилище.

Сценарий#

Для сохранения образа в архив контейнера выполните следующие действия:

  1. Сохраните образ registry.example.ru/slo9/rsyslog в качестве tar-архива:

    • В формате docker-dir по умолчанию:

      podman save -o myrsyslog.tar registry.example.ru/slo9/rsyslog:latest
      
    • В формате oci-archive, используя опцию --format:

      podman save -o myrsyslog-oci.tar --format=oci-archive registry.example.ru/slo9/rsyslog
      

Архивы myrsyslog.tar и myrsyslog-oci.tar хранятся в текущем каталоге. Следующие шаги выполняются с архивом myrsyslog.tar.

  1. Проверьте тип файла myrsyslog.tar:

    file myrsyslog.tar
    

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

    myrsyslog.tar: POSIX tar archive
    
  2. Загрузите образ registry.example.ru/slo9/rsyslog:latest из myrsyslog.tar:

    podman load -i myrsyslog.tar
    

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

    ...
    Loaded image(s): registry.example.ru/rhel9/rsyslog:latest
    

Распространение образов UBI#

Используйте команду podman push, чтобы поместить образ UBI в собственный или сторонний реестр и поделиться им с другими пользователями. Можно обновить или добавить этот образ из репозиториев UBI по своему усмотрению.

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

podman tag registry.example.ru/ubi9/ubi registry.example.ru:5000/ubi9/ubi

Переместите образ registry.example.ru:5000/ubi9/ubi из пользовательского локального хранилища в реестр:

podman push registry.example.ru:5000/ubi9/ubi

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

Используйте команду podman rmi для удаления локально сохраненных образов контейнера. Можно удалить образ по его имени или ID:

  1. Выведите список всех образов, загруженных в локальное хранилище:

    podman images
    

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

    REPOSITORY                           TAG     IMAGE ID      CREATED      SIZE
    registry.example.ru/slo9/rsyslog    latest  4b32d14201de  7 weeks ago  228 MB
    registry.ew[ample]ru./ubi9/ubi      latest  3269c37eae33  7 weeks ago  208 MB
    localhost/myubi                      X.Y     3269c37eae33  7 weeks ago  208 MB
    
  2. Выведите список всех контейнеров:

    podman ps -a
    

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

    CONTAINER ID  IMAGE                                    COMMAND          CREATED        STATUS            PORTS   NAMES
    7ccd6001166e  registry.example.ru/rhel9/rsyslog:latest  /bin/rsyslog.sh  6 seconds ago  Up 5 seconds ago          mysyslog
    

    Для удаления образа registry.example.ru/slo9/rsyslog необходимо остановить все контейнеры, запущенные в нем, при помощи команды podman stop.

  3. Остановите контейнер mysyslog:

    podman stop mysyslog
    

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

    7ccd6001166e9720c47fbeb077e0afd0bb635e74a1b0ede3fd34d09eaf5a52e9
    
  4. Удалите образ registry.example.ru/slo9/rsyslog:

    podman rmi registry.example.ru/slo9/rsyslog
    
    • Для удаления нескольких образов используйте:

      podman rmi registry.example.ru/rhel8/rsyslog registry1.example.io/ubi8/uby
      
    • Для удаления всех образов из пользовательской системы используйте:

      podman rmi -a
      
    • Для удаления образа, с которыми связано несколько имен (тегов), добавьте опцию -f:

      podman rmi -f 1de7d7b3f531
      

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

      1de7d7b3f531...