Skip to content

🐳 Использование Podman

1. Общее описание

Podman (Portable Operating System Interface Containers) — это демон-фри инструмент командной строки для развертывания и управления контейнерами и образами в Linux. Он совместим с Docker CLI и поддерживает:

  • Запуск контейнеров без привилегий root (rootless)
  • Управление контейнерами, образами, томами, сетями
  • Работа с Kubernetes через podman generate kube
  • Сборку образов (buildah), управление секретами и т.д.

Основные особенности:

  • Не требует запущенного демона
  • Поддержка OCI стандартов
  • Интеграция с systemd
  • Поддержка мультитенантности (rootless пользователи)

2. Установка Podman

2.1. Ubuntu / Debian

sudo apt update && sudo apt install -y podman

2.2. CentOS / RHEL / AlmaLinux / Rocky Linux

sudo dnf install -y podman

2.3. Fedora

sudo dnf install -y podman

2.4. macOS и Windows (через WSL2)

На macOS и Windows рекомендуется использовать Podman Desktop, который предоставляет GUI и упрощает настройку среды.

Ссылки: - Podman Desktop - Podman for Mac/Windows


3. Основные команды

Команда Назначение
podman version Показать версию Podman
podman info Информация о системе и хранилище
podman images Список локальных образов
podman ps Список запущенных контейнеров
podman ps -a Все контейнеры (включая остановленные)
podman pull <image> Скачать образ из registry
podman run <options> <image> Запустить контейнер

4. Примеры использования

4.1. Запуск простого контейнера

podman run hello-world

4.2. Запуск Nginx

podman run -d --name mynginx -p 8080:80 nginx

Теперь можно открыть браузер и перейти по адресу: http://localhost:8080

4.3. Сборка и запуск кастомного образа

Создайте Dockerfile:

FROM alpine
CMD ["sh", "-c", "echo Hello from Alpine!"]

Соберите образ:

podman build -t my-alpine .

Запустите:

podman run my-alpine

5. Rootless режим

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

Включение rootless режима:

  1. Добавьте пользователя в подсистему subuid и subgid:
sudo usermod --add-subuids 100000-165535 youruser
sudo usermod --add-subgids 100000-165535 youruser
  1. Перезапустите сессию или выйдите и зайдите снова

  2. Проверьте:

podman info | grep -i rootless

6. Работа с контейнерными образами

6.1. Поиск образа

podman search ubuntu

6.2. Удаление образа

podman rmi <image_id>

6.3. Сохранение и загрузка образа

podman save ubuntu > ubuntu.tar
podman load -i ubuntu.tar

7. Управление контейнерами

7.1. Остановка и удаление

podman stop mynginx
podman rm mynginx

7.2. Логи контейнера

podman logs mynginx

7.3. Подключение к контейнеру

podman exec -it mynginx sh

8. Сети и тома

8.1. Создание сети

podman network create mynetwork

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

podman run --network mynetwork --name myapp my-image

8.3. Использование томов

podman run -v ./data:/data -it alpine ls /data

9. Интеграция с systemd

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

Генерация юнита:

podman generate systemd --new --files --name mynginx

Это создаст файл container-mynginx.service.

Копирование и запуск:

mkdir -p ~/.config/systemd/user/
cp container-mynginx.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable container-mynginx
loginctl enable-linger $USER  # для автозапуска rootless контейнеров

10. Интеграция с Kubernetes

Экспорт контейнеров в формат Kubernetes

podman generate kube mynginx > mynginx-pod.yaml

Затем можно применить его в Kubernetes:

kubectl apply -f mynginx-pod.yaml

11. Безопасность

  • Используйте rootless-режим
  • Настройте SELinux/AppArmor
  • Используйте --read-only и --tmpfs для повышения безопасности
  • Используйте podman system prune для очистки неиспользуемых ресурсов

12. Полезные ссылки