Смартфон на Android удобен как переносной стенд: на нём можно собрать черновик API, проверить связку из двух сервисов и забрать образ на обычный сервер. Termux даёт пользовательское окружение Linux без отдельного компьютера, а podman работает с OCI-образами в том же формате, что и Docker, но без постоянно запущенного демона и, как правило, без прав root.
Ниже — рабочий порядок для локальной разработки на своём устройстве: подготовка Termux, сборка образа, публикация порта на localhost и объединение нескольких контейнеров в pod. Это не замена серверному кластеру и не способ обойти ограничения прошивки.
Почему podman, а не демон Docker
Классический Docker опирается на dockerd, cgroup и overlay. На нерутованном Android эти механизмы ядра доступны не полностью, поэтому демон часто не стартует. Podman запускает контейнер как обычный процесс пользователя и сохраняет привычные команды: build, run, images, pod.
Образ, собранный на телефоне, остаётся переносимым. Его можно загрузить в реестр и запустить на сервере с Podman или Docker. На устройстве такой контур уместен для учёбы, полевого прототипа и отладки, но не для промышленной нагрузки и не для хранения производственных секретов.
Подготовка окружения Termux
Используйте сборку Termux из F-Droid и обновляйте пакеты перед установкой движка. Вместе с podman понадобятся инструменты сборки и runtime:
pkg update && pkg upgrade -y
pkg install podman buildah crun
Проверка, что движок видит хранилище и runtime:
podman info
Если в отчёте нет сетевого помощника для режима без root, доустановите его из того же репозитория командой pkg install slirp4netns. Данные образов по умолчанию лежат в домашнем каталоге Termux. Отдельный системный раздел для этого не требуется.
Сборка образа
Для первого сервиса достаточно официального образа nginx. Файл Dockerfile в пустом каталоге проекта:
FROM docker.io/library/nginx:1.27-alpine
EXPOSE 80
Сборка с локальным тегом, чтобы не обращаться к внешнему реестру на этапе имени:
podman build -t localhost/edge-api:0.1 .
Список локальных образов показывает podman images. Базовый образ лучше фиксировать тегом, а не плавающим latest: так повторная сборка на другом телефоне даёт тот же слой.
Запуск и проверка на localhost
Контейнер поднимается в фоне, порт контейнера 80 сопоставляется с портом 8080 на устройстве:
podman run -d --name edge-api --restart=no -p 8080:80 localhost/edge-api:0.1
Проверка выполняется на самом телефоне, без публикации сервиса наружу:
curl -sS -o /dev/null -w '%{http_code}
' http://127.0.0.1:8080/
Ожидаемый код ответа — 200. Журнал смотрят командой podman logs edge-api, остановка — podman stop edge-api, удаление остановленного контейнера — podman rm edge-api. Слушать имеет смысл только localhost. Открывать порт в чужую сеть без аутентификации и контроля доступа не стоит ни на Android, ни на сервере.
Несколько сервисов в одном pod
На одном устройстве два-три процесса связывают через pod: общую сеть контейнеров, которую создаёт сам podman. Снаружи публикуется только нужный порт.
podman pod create --name edge -p 8080:80
podman run -d --pod edge --name api localhost/edge-api:0.1
podman run -d --pod edge --name cache docker.io/library/redis:7-alpine
Внутри pod процессы доступны друг другу по имени контейнера. Состояние связки показывает podman pod ps, остановка всей группы — podman pod stop edge. Если установленная сборка поддерживает подкоманду, описание можно сохранить в YAML и применить через podman play kube. Полноценный Kubernetes на телефоне не нужен: он не помещается в типичные ограничения ядра Android и только усложняет стенд.
Повторный запуск после открытия Termux делайте явным скриптом, который вы сами запускаете, либо через Termux:Boot. Скрытый автозапуск мешает понять, какие именно процессы занимают батарею и порт.
Ограничения платформы
Без root нет гарантии overlay-хранилища, лимитов CPU и полной сетевой изоляции. Часть образов, которым нужны специфичные capability, отдельные модули ядра или glibc-окружение, в Termux не стартует — это ограничение прошивки, а не ошибка Dockerfile. Образы держите маленькими: место и заряд на телефоне конечны.
Не монтируйте в контейнер каталоги с личными данными, ключами и перепиской. Секреты продакшена, внешние публикации и постоянную нагрузку оставляйте на обычных серверах. Стенд на Android проверяйте на целевом устройстве: поддержка user namespace отличается между прошивками.
Заключение
Termux и podman закрывают конкретную задачу: собрать OCI-образ и поднять небольшую связку микросервисов на своём Android, не разворачивая отдельную рабочую станцию. Команды совпадают с привычным контуром Docker, rootless-модель снижает требования к устройству, а переносимый образ затем уходит на сервер. Успех зависит от ядра конкретной прошивки, поэтому команды из статьи нужно прогнать на том телефоне, где стенд будет жить.
РыбинскЛАБ помогает командам собрать такой контур аккуратно: подбираем базовые образы под Termux, описываем pod и сценарий сборки, отделяем учебный стенд от продуктивной среды и фиксируем регламент в рамках законодательства РФ. Если нужно внедрить контейнеризацию на мобильных стендах или обучить разработчиков работе с podman в Termux, обратитесь в РыбинскЛАБ — разберём архитектуру, ограничения устройства и рабочий пайплайн под вашу задачу.