Образы и контейнеры

Поиск образов

Ищите образы по ключевому слову:

$ podman search fedora
$ podman search homeassistant

Реестры, в которых будет выполняться поиск, настраиваются в файле /etc/containers/registry.conf.

Результат поиска будет включать как расположение реестра, так и имя образа.

  • Имя реестра может включать номер порта.

  • Имя образа состоит из USER/REPO. Пользователь может быть отдельным лицом, командой или компанией, загружающей образы в реестр.

  • Репозиторий образов содержит помеченные тегами образы и скрытые слои. Большинство репозиториев содержат образ с тегом «latest».

  • При загрузке образа с помощью команд pull, run или build вы можете указать конкретный образ с тегом. По умолчанию загружается образ с тегом «latest».

Команда skopeo — это утилита для работы с образами во множестве различных контейнерных окружений. Она была создана для просмотра информации в удалённых реестрах и теперь является командой и библиотекой для копирования образов с различными транспортами. Она используется для управления образами контейнеров и их хранилищем удалённо и локально, и всё это без необходимости прав root. Она также может передавать учётные данные аутентификации, когда это требуется репозиторием.

Просмотрите даты создания, архитектуры, метки, теги и контрольные суммы слоёв удалённого репозитория образов:

$ skopeo inspect docker://registry.fedoraproject.org/fedora-minimal

Управление локальными образами

При запуске контейнера образ сначала загружается в локальную систему. Может быть полезно заранее загрузить образ отдельной командой.

По умолчанию загружается последний образ из реестра по умолчанию:

$ podman pull fedora

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

$ podman pull registry.fedoraproject.org/fedora-minimal:rawhide

Выведите список локальных образов:

$ podman images
REPOSITORY                                           TAG       IMAGE ID       CREATED       SIZE
registry.fedoraproject.org/fedora-minimal            rawhide   8ecda3b9bc0d   2 days ago    164MB
docker.io/homeassistant/raspberrypi3-homeassistant   latest    3c74046ca2a7   3 days ago    1.05GB
docker.io/library/fedora                             latest    8b38e3af7237   4 weeks ago   315MB

Тот же вывод отображается с помощью podman image ls. Обратите внимание на команду «image» в единственном числе перед дополнительной командой «ls». Если у вас много образов, вы можете указать фильтры или отсортировать по значению, отличному от даты создания.

Как пользователь, локальные образы будут храниться в каталоге ~/.local/share/containers/. У каждого пользователя своё пространство имён, поэтому они отделены от контейнеров, запущенных от имени root. Список образов, доступных root, отображает другой или пустой список:

$ sudo podman images

Некоторые действия невозможно выполнить с контейнерами без прав root. Некоторые устройства и тома потребуют, чтобы вы загружали и запускали контейнеры в пространстве имён root. Текущая версия podman v1.0 также требует root для публикации портов. Следующая версия позволит публиковать порты без прав root.

Как и удалённые образы, локальные образы также можно исследовать:

$ podman inspect fedora

Чтобы исследовать образ с тегом, отличным от «latest», укажите тег:

$ podman inspect fedora-minimal:rawhide

Запуск контейнеров

Чтобы запустить контейнер, используйте:

$ podman run fedora

С образом fedora контейнер запустится, а затем завершится, так как больше нечего выполнять. Некоторые образы настроены на запуск приложения на переднем плане, и контейнер не завершится, пока не завершится приложение.

Чтобы вывести список запущенных контейнеров, используйте:

$ podman container ls

Чтобы увидеть все контейнеры, включая завершённые:

$ podman container ls -a
CONTAINER ID   IMAGE                             COMMAND     CREATED              STATUS                      PORTS   NAMES            IS INFRA
7835aaadd2d1   docker.io/library/fedora:latest   /bin/bash   About a minute ago   Exited (0) 14 seconds ago           hopeful_beaver   false

Завершённые контейнеры сохраняются, чтобы можно было исследовать любые данные, включая журналы, прежде чем они будут потеряны. Вы можете запустить завершённый контейнер, но типичный рабочий процесс обычно удаляет использованные контейнеры, запуская новые по мере необходимости.

Опции команды run могут изменить поведение при запуске контейнера:

$ podman run -it \ (1)
> --name demo \ (2)
> --rm \ (3)
> fedora /bin/bash (4)
bash-4.4#  (5)
1 Опции -it включают интерактивный режим и выделяют псевдо-TTY.
2 Вы можете задать имя вашему контейнеру. Без этой опции будет сгенерировано случайное имя.
3 Опция --rm приводит к удалению контейнера при его завершении. Это экономит место и позволяет запустить новый контейнер с тем же именем.
4 Команда для запуска. Команда должна присутствовать в образе. Не все образы включают bash.
5 Процесс /bin/bash работает на переднем плане. Когда вы выйдете из оболочки, контейнер завершится.

Публикация портов

Если ваше приложение прослушивает сеть, вам потребуется сопоставить порт контейнера с локальным портом на вашем устройстве. В текущей версии публикация портов требует root, поэтому образ должен быть доступен в пространстве имён root.

Добавьте опцию -p при запуске контейнера:

$ sudo podman run -p 127.0.0.1:8080:80 --name demo mydemohttp:latest

Затем вы можете подключиться к вашему приложению через 127.0.0.1:8080

Формат: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort.

Другие опции публикации портов и множество других опций запуска доступны и хорошо задокументированы на странице man podman-run.

Сопоставление локального каталога

Возможно, вы захотите, чтобы ваше приложение записывало журналы или собирало данные в каталог на хосте. Некоторые контейнеры ожидают, что настроенные файлы конфигурации находятся на хост-устройстве. В обоих случаях вы можете создать привязанное монтирование с опцией --volume. Укажите каталог хоста, точку монтирования внутри контейнера и любые опции монтирования.

Например, Home Assistant ожидает, что файлы конфигурации находятся на хост-устройстве:

$ podman run -d --name="home-assistant" -v /home/pi/homeassistant:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/raspberrypi3-homeassistant

Сопоставление локального устройства

Опция --device добавит хост-устройство в контейнер. Укажите имя хост-устройства и, необязательно, имя устройства в контейнере и любые разрешения. Некоторые устройства, такие как устройство GPIO, потребуют root.

Чтобы получить доступ к GPIO-устройству хоста из контейнера:

$ sudo podman run -it --rm --name demo-gpio --device=/dev/gpiochip0 fedora:latest /bin/bash

Подключение к запущенному контейнеру

Вы также можете подключиться к запущенному контейнеру. Укажите имя или ID контейнера и команду для выполнения:

$ podman exec -it demo /bin/bash

Вы также можете просматривать журналы контейнера напрямую с помощью podman:

$ podman logs demo

Обе команды exec и logs также являются частью команды podman container.

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

Выведите список контейнеров, чтобы увидеть «Container ID» и «name» каждого контейнера. Удалите контейнер, указав либо ID контейнера, либо имя:

$ podman container rm demo

Удаление контейнера происходит автоматически при завершении контейнера, если контейнер был запущен с опцией --rm.

Удаление контейнера не удаляет образ. Выведите список локальных образов с помощью podman images или podman image ls. Удалите образ, используя либо «IMAGE ID», либо имя репозитория и тег:

$ podman rmi registry.fedoraproject.org/fedora-minimal:rawhide

Вы также можете удалить образ с помощью команды image:

$ podman image rm registry.fedoraproject.org/fedora-minimal:rawhide