Поиск по сайту:

Что такое Podman и чем он отличается от Docker?


Podman — это контейнерный движок, совместимый со спецификацией OCI Containers. Podman является частью RedHat Linux, но его также можно установить в других дистрибутивах.

Поскольку Podman совместим с OCI, его можно использовать в качестве замены более известной среды выполнения Docker. Большинство команд Docker можно напрямую преобразовать в команды Podman.

Вот посмотрите, как складываются две среды выполнения.

Что такое среда выполнения?

Для многих «контейнер» по-прежнему остается «контейнером Docker». Это не точное представление о текущей экосистеме контейнеров. Docker создает образы контейнеров OCI, которые можно использовать с другими совместимыми средами выполнения. Kubernetes — один из примеров, а Podman — другой.

Как следствие, Podman и Docker имеют пересекающиеся основные функции. Оба создают образы, которые другой может использовать для запуска контейнеров. Затем две среды выполнения добавляют свои собственные особенности поверх базовых функций контейнеризации.

Как установить Подман

Если вы используете RedHat Linux, Podman находится в репозитории extras. Используйте subscription-manager, чтобы добавить репозиторий. Затем вы сможете использовать yum для установки Podman.

su -
subscription-manager repos --enable rhel-7-server-extras-beta-rpms
yum -y install podman

Большинство других популярных дистрибутивов Linux также включают Podman в свои репозитории по умолчанию. Вы можете apt install podman, dnf install podman или pacman -S podman, чтобы установить его.

Работа с контейнерами и изображениями

Интерфейс командной строки Podman намеренно согласован с Docker. Это означает, что вы можете использовать знакомые команды Docker для взаимодействия с контейнерами Podman:

podman pull my-image:latest

podman run my-image:latest --name my-container

podman ps

podman rm my-container

Podman должен быть сразу знаком пользователям Docker. Вы можете использовать псевдоним docker для podman и не заметить разницы в повседневном использовании. Конечно, не все функции доступны — попытка использовать команды Docker Swarm приведет к ошибке, поскольку у Podman нет ничего эквивалентного Swarm.

Чем отличается Подман?

Хотя он похож на Docker, у Podman есть несколько отличительных отличий. Во-первых, и, возможно, наиболее важным является его архитектура. Podman не использует демона — нет долговременного процесса управления вашими контейнерами.

Когда вы запускаете команду podman, вы напрямую взаимодействуете с процессом, который запускает ваши контейнеры и извлекает ваши изображения. Интерфейс командной строки Docker зависит от подключения к демону Docker. CLI отправляет команды демону, а затем демон обрабатывает их для создания контейнеров.

Модель Подмана помогает решить некоторые проблемы, связанные с безопасностью Docker. Отсутствие демона значительно снижает поверхность атаки контейнера. Если вам нужен удаленный доступ, Podman предоставляет REST API, который позволяет вам взаимодействовать со всеми поддерживаемыми типами ресурсов.

стручки

Podman обладает уникальными функциями, которых полностью лишен Docker. В Podman контейнеры могут образовывать «стручки», которые работают вместе. Это похоже на концепцию Kubernetes Pod.

Чтобы создать модуль, используйте команду pod create:

podman pod create --name my-pod

Контейнеры добавляются в поды путем включения флага --pod с podman run:

podman run --pod my-pod --name image-1 my-image:latest
podman run --pod my-pod --name image-2 another-image:latest

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

podman kill my-pod      # Kill all containers
podman restart my-pod   # Restart all containers
podman stop my-pod      # Stop all containers

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

Ближе всего Docker подходит к этому с Compose. Для использования Compose необходимо написать файл docker-compose.yml и использовать отдельный двоичный файл docker-compose. Podman позволяет создавать поды с помощью одной команды, не выходя из терминала.

Когда вам нужно экспортировать определение пода, Podman создаст манифест YAML, совместимый с Kubernetes. Вы можете взять манифест и применить его непосредственно к кластеру Kubernetes. Это сокращает разрыв между запуском контейнера в разработке и его запуском в производственной инфраструктуре.

podman generate kube

Контейнеры без корней

Podman поддерживает контейнеры без корней. Это поможет вам заблокировать вашу безопасность, не позволяя запускать контейнеры от имени пользователя root хоста. Docker теперь поддерживает режим без рута в качестве параметра конфигурации демона. У Podman был rootless до Docker, и он уделяет больше внимания его использованию.

Сначала установите slirp4netns:

yum install slirp4netns

Затем настройте количество сетевых пространств имен на уровне пользователя:

echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf
sysctl -p /etc/sysctl.d/userns.conf

Эта команда позволяет использовать сетевые пространства имен, не будучи root.

Теперь вы готовы запустить контейнер без рута! Подключиться к серверу как обычный пользователь. Запустите новый контейнер с помощью podman run. Он будет создан с использованием UID вашей учетной записи пользователя вместо root.

Помимо полностью некорневых пространств имен, podman по умолчанию ограничен текущим пользователем. Ваши изображения и контейнеры хранятся в папке пользователя $HOME. Когда вы запускаете podman ps или podman images, вы видите только ваш контент, а не каждый ресурс в системе.

Заключение

Podman — это среда выполнения контейнера, совместимая с OCI, которая работает без демона. CLI реализует все основные команды Docker. Вы можете легко перейти на Podman или использовать его вместе с существующей установкой Docker.

В отличие от Docker, Podman имеет первоклассную поддержку управления несколькими контейнерами. Модель Pod упрощает работу со стеком сервисов. Вы можете остановить, перезапустить и удалить все связанные контейнеры с помощью команд на уровне модуля.

Podman также готов помочь вам перейти на услуги оркестрации контейнеров. Возможность экспортировать совместимый с Kubernetes YAML делает Podman более подходящим для многих контейнерных производственных сред. Разработчики и операторы могут использовать один и тот же инструмент для управления своими контейнерами, что обеспечивает больше возможностей для совместной работы и гибкости.