Подробный гайд: Podman в ALT Linux: полное руководство по установке и настройке контейнеров
Ниже представлен подробный практический гайд по установке, настройке и эксплуатации Podman в ALT Linux (ветки p10, p11 и Sisyphus) без декоративных элементов. Руководство ориентировано на современные реалии (2024–2026 гг.), где Podman по умолчанию работает в rootless-режиме и использует cgroups v2.
1. Подготовка системы
Перед установкой убедитесь, что система обновлена и поддерживает необходимые ядерные функции:
sudo apt-get update
sudo apt-get dist-upgrade -y
Проверка поддержки cgroups v2 (обязательно для rootless Podman):
stat -fc %T /sys/fs/cgroup/
# Должно вернуть: cgroup2fs
Если возвращается tmpfs или ошибка, убедитесь, что в загрузчике не указан параметр systemd.unified_cgroup_hierarchy=0. В современных сборках ALT Linux cgroups v2 включено по умолчанию.
2. Установка Podman
sudo apt-get install podman podman-docker slirp4netns fuse-overlayfs crun uidmap shadow-utils
Пояснение пакетов:
| Пакет | Назначение |
|---|---|
| podman | Основной бинарник |
| podman-docker | Совместимые алиасы docker → podman |
| slirp4netns | Виртуальная сеть для rootless-контейнеров |
| fuse-overlayfs | Драйвер хранилища без прав root |
| crun | Современная легковесная среда выполнения (runtime) |
| uidmap / shadow-utils | newuidmap/newgidmap для изоляции пользователей |
Проверка установки:
podman --version
podman info | grep -E "graphDriverName|cgroupVersion|runRoot"
3. Настройка rootless-режима (рекомендуется)
Rootless Podman позволяет запускать контейнеры без sudo, что безопаснее и соответствует современным стандартам.
3.1. Настройка subuid / subgid
Проверьте, есть ли диапазоны для вашего пользователя:
grep "^$(whoami):" /etc/subuid /etc/subgid
Если вывод пуст, добавьте вручную (замените denis на ваш логин):
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)
Диапазон должен содержать минимум 65536 UID/GID. Избегайте пересечений с другими пользователями.
3.2. Конфигурация хранилища
Создайте файл ~/.config/containers/storage.conf:
mkdir -p ~/.config/containers
cat > ~/.config/containers/storage.conf <<EOF
[storage]
driver = "overlay"
graphroot = "$HOME/.local/share/containers/storage"
runroot = "$XDG_RUNTIME_DIR/containers"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
EOF
Проверьте применение:
podman info | grep -A2 "graphDriverName"
4. Реестры образов
По умолчанию Podman использует docker.io, quay.io и registry.fedoraproject.org.
Для корпоративных сред или локальных зеркал отредактируйте /etc/containers/registries.conf (требуются права root):
sudo cp /usr/share/containers/registries.conf /etc/containers/registries.conf
sudo nano /etc/containers/registries.conf
Пример секции для добавления зеркала:
[[registry]]
prefix = "docker.io"
location = "mirror.example.com/library"
insecure = false
blocked = false
Для тестовых сред можно разрешить http (не рекомендуется для продакшена):
insecure_registries = ["registry.local:5000"]
5. Базовое использование
| Задача | Команда |
|---|---|
| Запуск контейнера | podman run -d --name web -p 8080:80 nginx:alpine |
| Список процессов | podman ps / podman ps -a |
| Логи | podman logs -f web |
| Вход в контейнер | podman exec -it web /bin/sh |
| Остановка/удаление | podman stop web && podman rm web |
| Сборка образа | podman build -t myapp:latest -f Dockerfile . |
| Экспорт/Импорт | podman save -o myapp.tar myapp:latest / podman load -i myapp.tar |
| Совместимость с Docker | docker run ... (если установлен podman-docker) |
Для работы docker-compose с Podman установите podman-compose или используйте переменную окружения:
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
6. Интеграция с systemd
Podman умеет генерировать нативные systemd-юниты для контейнеров.
6.1. Генерация файла службы
podman generate systemd --new --name web --files
# Создаст ./container-web.service
6.2. Установка и активация
Вариант A: Пользовательская служба (без sudo)
mkdir -p ~/.config/systemd/user
mv container-web.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now container-web.service
loginctl enable-linger $(whoami) # Чтобы служба работала после выхода из сессии
Вариант B: Системная служба (требует sudo)
sudo mv container-web.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now container-web.service
Проверка статуса:
systemctl --user status container-web.service
journalctl --user -u container-web.service -f
7. Устранение типичных проблем
| Симптом | Решение |
|---|---|
| newuidmap failed: No subuid ranges | Проверьте /etc/subuid и /etc/subgid. Добавьте диапазоны через usermod. |
| overlay: not supported | Установите fuse-overlayfs. Убедитесь, что в storage.conf указан mount_program. |
| Контейнер не видит сеть | Убедитесь, что установлен slirp4netns или pasta (Podman 5+). Пересоздайте сеть: podman network create mynet |
| permission denied при запуске от пользователя | Проверьте права на $XDG_RUNTIME_DIR. Выполните loginctl enable-linger $USER. |
| Образы тянутся медленно | Настройте зеркало в registries.conf. Используйте podman pull --platform linux/amd64 если архитектура не определяется. |
| Полный сброс состояния | podman system reset (удаляет все контейнеры, образы, сети. Используйте осторожно!) |
Логи пользовательских служб: journalctl --user -u 'container-*' -f
8. Лучшие практики и безопасность
- Всегда используйте rootless, если нет явной необходимости в привилегированном доступе.
- Ограничивайте ресурсы: --memory=512m --cpus=1.0
- Храните данные в томах: podman volume create appdata → -v appdata:/data
4. Обновляйте контейнеры автоматически:
podman auto-update --dry-run # Проверка
podman auto-update # Применение
(Требует метки io.containers.autoupdate=registry при создании контейнера)
5. Используйте podman unshare для операций, требующих изменения файловой системы вне контейнера:
podman unshare chown -R 1000:1000 /path/to/volume
6. AppArmor в ALT Linux:
- По умолчанию политики могут блокировать некоторые действия. При ошибках permission denied проверьте статус: aa-status. При необходимости создайте локальный профиль или временно переведите в complain-режим.