Как установить и использовать Podman (альтернатива Docker)
Вы когда-нибудь использовали Docker, но считали его слишком ресурсоемким в вашей системе? Если да, возможно, вам стоит попробовать Podman, новый инструмент от Red Hat, который предоставляет альтернативу Docker.
Podman — это инструмент, предназначенный для упрощения создания контейнеров и управления ими. В этом руководстве вы установите Podman и изучите некоторые основные сценарии использования. В конце концов, вы сможете решить, подходит ли вам Podman.
Готовый? Читайте дальше и начните управлять контейнерами заново!
Предварительные условия
Этот урок будет практической демонстрацией. Если вы хотите следовать инструкциям, убедитесь, что у вас есть следующее.
- Машина с Linux. В этой демонстрации используется Ubuntu 20.04 LTS, но подойдут любые дистрибутивы Linux.
- Пользователь без полномочий root с привилегиями sudo.
Установка Podman в Ubuntu
Прежде чем управлять контейнерами с помощью Podman, вам сначала необходимо установить Podman на свой компьютер, поскольку он не поставляется предварительно установленным в вашем дистрибутиве Linux.
Чтобы установить Podman в Ubuntu, вы начнете с обновления менеджера пакетов APT и добавления репозитория пакетов Podman.
1. Откройте терминал и выполните приведенную ниже команду apt update
, чтобы убедиться, что вы установили последние обновления. Эта команда гарантирует отсутствие несоответствий пакетов между вашим компьютером и репозиторием пакетов.
sudo apt update -y
2. После обновления индекса пакета выполните приведенную ниже команду source
, чтобы запустить файл /etc/os-release
в качестве сценария. Эта команда гарантирует, что ваш компьютер распознает, какую версию Ubuntu вы используете.
Файл os-release содержит информацию об операционной системе, такую как имя и кодовое имя. Файл также может содержать другую информацию, например номера версий различных компонентов (ядра, X-сервера и т. д.).
source /etc/os-release
3. Запустите приведенную ниже команду sh -c echo
, чтобы добавить репозиторий пакетов deb kubic
в APT. Podman недоступен в репозиториях Ubuntu по умолчанию, поэтому вам необходимо добавить репозиторий Podman перед его установкой.
Команда ниже выполняет следующее:
- Создает новый файл (
sh -c
) в каталоге/etc/apt/sources.list.d/
. В этот каталог APT загружает пакеты deb для установки на ваш компьютер.
- Гарантирует, что вы используете определенную версию Ubuntu (
{VERSION_ID
), которая является версией, которую вы ранее получили с помощью командыsource
, приведенной выше на втором шаге.
- Перенаправляет выходные данные (
>
) для записи в конец файла, гарантируя, что ваши входные данные будут правильно записаны в файл (sources.list.d/devel:kubic:libcontainers:stable.list
).
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
4. Теперь выполните приведенную ниже команду wget
, чтобы добавить ключ репозитория в список доверенных ключей APT.
Red Hat хранит ключ, и они подписывают его закрытым ключом, который проверяет только тех людей, у которых есть их открытый ключ. Этот ключ гарантирует, что Red Hat, а не кто-то другой, выпустит пакеты, которые вы загружаете и устанавливаете.
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key -O- | sudo apt-key add -
5. Повторно запустите команду apt update
, чтобы убедиться, что список пакетов APT обновлен.
sudo apt update -y
6. Затем выполните приведенную ниже команду apt install
, чтобы установить podman
.
sudo apt install podman -y
7. Наконец, выполните приведенную ниже команду, чтобы проверить установленную --version
Podman.
podman --version
Как вы можете видеть ниже, установленная версия Podman — 3.4.2, последняя версия на момент написания, и ваша может отличаться.
Вы также можете запустить команду podman inf ниже, чтобы просмотреть дополнительную информацию об установке Podman.
podman info
Включение реестров OCI
Прежде чем использовать Podman для создания контейнеров, убедитесь, что Podman может взаимодействовать с реестрами OCI. Podman поддерживает несколько реестров OCI одновременно, поэтому вы можете создавать контейнеры, используя разные репозитории.
Откройте файл /etc/containers/registries.conf
в текстовом редакторе по вашему выбору. Этот файл определяет все реестры, с которыми может взаимодействовать Podman. Podman просматривает этот файл, чтобы выяснить, к каким реестрам ему следует подключиться.
sudo nano /etc/containers/registries.conf
Теперь заполните файл registries.conf следующими строками, сохраните изменения и закройте редактор.
Эти строки настраивают Podman на использование общедоступного реестра в Docker Hub (docker.io,registr.access.redhat.com) и частного реестра(quay.io), что Рекомендовано.
[[registry]]
prefix="[quay.io](<http://quay.io/>)"
location="internal.registry.mirror/quay"
[[registry]]
prefix="[docker.io](<http://docker.io/>)"
location="internal.registry.mirror/docker"
[[registry]]
prefix="[registry.access.redhat.com](<http://registry.access.redhat.com/>)"
location="internal.registry.mirror/redhat"
Запуск контейнеров Podman с привилегиями Podman
Теперь, когда вы установили Podman и настроили реестры, вы можете запустить контейнеры Podman с привилегиями Podman. Ядро Linux поддерживает широкий спектр проверок разрешений для своих системных вызовов, например возможностей.
В случае контейнеров Podman возможности контролируют поведение root по умолчанию в пространстве имен пользователя. Вы можете использовать флаг --privileged
при запуске контейнера, чтобы добавить все возможности, которых еще нет в контейнере.
1. Запустите приведенную ниже команду podman run
, чтобы создать контейнер fedora
без возможностей.
podman run -d fedora sleep 100
2. Затем выполните приведенную ниже команду podman top
, чтобы просмотреть все возможности.
podman top -l capeff
Как показано ниже, обычный контейнер без root имеет ограниченные возможности.
3. Запустите приведенную ниже команду podman run
, чтобы создать контейнер со всеми возможностями (--privileged
).
podman run --privileged -d fedora sleep 100
4. Наконец, повторно запустите команду podman top
, чтобы проверить разницу в возможностях.
podman top -l capeff
Вы заметите, что этому контейнеру доступны все возможности благодаря флагу –privileged, как показано ниже.
Вы заметите, что этому контейнеру доступны все возможности благодаря флагу –privileged, как показано. Флаг –privileged позволяет контейнеру работать со всеми возможностями, а не только с теми, которые уже есть в контейнере. Этот флаг важен, поскольку он сопоставляет пространство имен пользователя контейнера с пространством имен хоста, предоставляя ему все возможности процессов, запущенных в вашей системе.
Если вы не установите флаг –privileged при запуске контейнера, то контейнер будет иметь ограниченный набор возможностей. В случае контейнеров, которые используют собственное пространство имен пользователя, вам придется явно предоставить им все возможности.
Работа с изображениями и контейнерами Podman
Теперь, когда вы узнали, как добавлять реестры и возможности OCI для контейнера, вы можете работать с образами и контейнерами Podman. В этой демонстрации вы будете использовать NGINX в качестве образа для создания контейнера.
1. Запустите команду podman search
ниже, чтобы получить список всех доступных изображений Podman для nginx
.
podman search nginx
Ниже вы можете видеть, что вы получаете все доступные изображения с тегами для NGINX с сайтов docker.io, quay.io и redhat.com . репозиторий, который вы добавили ранее в разделе «Включение реестров OCI»:
- Столбец ИНДЕКС показывает, где расположены изображения.
- Столбец ОФИЦИАЛЬНЫЙ со статусом ОК указывает, что изображение в строке создано и поддерживается его официальной компанией. Например, образ NGINX со статусом OK создается и поддерживается его компанией NGINX. Эти образы будут обновляться по мере появления уязвимостей безопасности и обновлений исправлений.
- Столбец АВТОМАТИЧЕСКИ со статусом ОК означает, что образы созданы автоматически. Эти образы будут обновляться по мере появления уязвимостей безопасности и обновлений исправлений.
2. Выбрав образ NGINX для использования, выполните приведенную ниже команду podman
, чтобы загрузить (pull
) образ на свой локальный компьютер.
В этой демонстрации используется nginx:alpine, поскольку это самый маленький образ, который может работать только в памяти, что экономит время на последующих этапах сборки.
podman pull nginx:alpine
На этом этапе у вас есть новый образ, который вы можете использовать для создания контейнера или использовать в качестве базового образа для других контейнеров.
3. Запустите команду podman images
, чтобы просмотреть информацию о новом изображении.
podman images
4. Теперь выполните приведенную ниже команду podman run
, чтобы создать контейнер из образа (nginx:alpine
) и запустить на нем сервер nginx
. изображение.
Эта команда выполняет следующее:
- Запускает контейнер в интерактивном режиме (
-it
) и позволяет подключить терминал.
- Удаляет (
--rm
) контейнер после его выхода/остановки.
- Запускает контейнер в фоновом режиме (
--d
) и публикует (-p
) порт80
на всех интерфейсах для порта8080
в контейнере.
- Укажите имя контейнера (
--name web
).
podman run -it --rm -d -p 8080:80 --name web nginx:alpine
Вы получите случайный идентификатор контейнера, как показано ниже, который вы можете использовать для мониторинга/запуска/остановки/удаления контейнера. Запишите идентификатор контейнера, так как он пригодится при проверке журналов или остановке определенного контейнера.
5. Запустите приведенную ниже команду podman ps
(без аргументов), чтобы проверить, работает ли ваш контейнер.
podman ps
Вы можете видеть, что веб-контейнер включен и использует порт 8080/TCP на вашем хост-компьютере для предоставления доступа к своему ресурсу.
6. Для двойной проверки откройте веб-браузер и перейдите по адресу localhost:8080 или your-server-ip:8080, где your-server-ip< — IP-адрес вашего сервера.
Если ваш контейнер работает, вы увидите экран приветствия NGINX по умолчанию, как показано ниже.
Если вы не уверены, как настроен контейнер, или если в нем есть какие-либо ошибки, запустите приведенную ниже команду podman logs, чтобы получить файлы журналов для контейнера. Замените mycontainer идентификатором целевого контейнера.
podman logs mycontainer
7. Запустите любую из приведенных ниже команд podman stop
, чтобы остановить контейнер. Замените mycontainer
идентификатором целевого контейнера или замените web
фактическим именем контейнера.
Поскольку на четвертом шаге вы использовали флаг –rm, Podman удалит ваш контейнер, как только вы его остановите. Эта настройка помогает сохранить ваше рабочее пространство свободным от беспорядка.
# Stops the container by Container ID
podman stop mycontainer
# Stops the container by Container Name
podman stop web
8. Наконец, запустите команду podman ps
, чтобы получить список всех контейнеров, включая остановленный контейнер.
podman ps -a
Ваш контейнер был удален, когда вы ранее его остановили, поэтому вы ничего не получите в списке, как показано ниже.
Заключение
Из этой статьи вы узнали, как устанавливать Podman и как работать с образами и контейнерами для развертываний. На этом этапе вы можете использовать образы с поддержкой OCI из репозиториев docker.io, quay.io и redhat.com для создания свои собственные контейнеры.
Обладая этими новыми знаниями, почему бы не создать свои модули Kubernetes с помощью Podman play kube или не начать использовать Ansible для автоматизации контейнеров Podman?