🐳 Использование 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 режима:
- Добавьте пользователя в подсистему
subuid
иsubgid
:
sudo usermod --add-subuids 100000-165535 youruser
sudo usermod --add-subgids 100000-165535 youruser
-
Перезапустите сессию или выйдите и зайдите снова
-
Проверьте:
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
для очистки неиспользуемых ресурсов