Установка podman на Linux

Используемые термины: Podman, Docker, Linux.
Мы не только установим podman, но и рассмотрим базовые команды с некоторыми особенностями настройки.
Установка podman
Для различных дистрибутивов Linux потребуется выполнить разные операции. Рассмотрим их по отдельности.
Ubuntu / Debian
В репозитории систем на базе deb пакета podman может не быть. Выполним установку репозитория от Red Hat.
Смотрим версию нашей системы:
cat /etc/os-release | grep VERSION_ID
В моем случае это было:
VERSION_ID="20.04"
Создадим переменную с версией — у меня будет такая команда:
export VERSION_ID="20.04"
Добавим ключ репозитория:
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
И пропишем сам репозиторий:
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" > /etc/apt/sources.list.d/podman.list
Обновим список пакетов:
apt update
Установим podman:
apt install podman
Rocky Linux / CentOS / Fedora / Red Hat
В системах на базе RPM, как правило, podman устанавливается из встроенного репозитория.
Вводим команду:
yum install podman
Проверка после установки
Чтобы проверить корректность работы podman, вводим команду:
podman run hello-world
Данная команда запустит контейнер на основе образа hello-world. В итоге, мы должны увидеть что-то на подобие:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
...
Или:
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
...
Базовые команды
Рассмотрим основные команды для работы с Podman.
1. Поиск образов.
В podman нам нужно точно указать источник образа, откуда будет выполнена загрузка.
Найти нужную запись можно командой:
podman search <имя образа>
Например:
podman search nginx
* в данном примере мы попробуем найти образ nginx.
В ответ мы можем получить большой список из полей NAME и DESCRIPTION. Первое является путем до источника.
Также мы можем отфильтровать список, попробовав найти официальный репозиторий:
podman search nginx | grep -i official
2. Запуск контейнера:
podman run <опции> <путь до образа>
Например:
podman run -d --name nginx -p 80:80 docker.io/library/nginx
* данная команда запустит контейнер с именем nginx, из образа docker.io/library/nginx (официального). Также мы прокинем внешний порт 80 в 80-й порт контейнера. Ключи, во многом, аналогичны тем, что используются в docker.
3. Список контейнеров:
podman ps
Команда покажет только запущенные контейнеры. Чтобы увидеть полный список, добавим опцию -a:
podman ps -a
4. Список образов:
podman images
5. Запустить / остановить / перезапустить.
Для запуска, остановки или перезапуска, соответственно, используем команды:
podman start <имя контейнера>
podman stop <имя контейнера>
podman restart <имя контейнера>
Автозапуск контейнеров
В отличие от docker, подман не работает как демон и в нем нет аналога опции --restart. По умолчанию, все запущенные контейнеры после перезагрузки не поднимутся обратно.
Для настройки автозапуска контейнера рекомендуется использовать команду:
podman generate systemd --name <имя контейнера>
Она отобразит содержимое для юнит-файла, который можно будет создать самостоятельно. Но удобнее использовать команду с опцией -f для автоматического создания такого файла. Рассмотрим конкретный пример.
Создадим каталог для размещения юнит-файлов в домашней директории пользователя и перейдем в него:
mkdir -p ~/.config/systemd/user
cd ~/.config/systemd/user
Создадим юнит-файл:
podman generate systemd --name nginx -f
* в конкретном примере мы настроим автозапуск для контейнера nginx.
Осталось разрешить автозапуск для юнита:
systemctl --user enable container-nginx
* обратите внимание на добавленную опцию --user (указывает на то, что юнит хранится в пользовательском каталоге), а также, имя юнита состоит из префикса container- и имени контейнера.