We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Termux и контейнеризация: Podman и Buildah для создания OCI‑образов без Docker Daemon

Практическое руководство по контейнеризации в Termux: установка Podman и Buildah, создание OCI‑образов, сборка без Docker Daemon и базовые шаги для работы с образами.

Автор: Усачёв Денис Евгеньевич, ведущий эксперт РыбинскЛАБ.

Почему контейнеризация в Termux — это реально

Termux давно перестал быть только «тренировочной» средой для утилит. На мобильных устройствах он удобен как инструмент для разработки, сборки артефактов и тестирования. Если при этом вы хотите получать воспроизводимые окружения, контейнеризация становится логичным следующим шагом.

Ключевой момент: в Termux обычно нет удобного доступа к Docker Daemon, а попытки его «поднимать» часто упираются в ограничения окружения. Хорошая альтернатива — использовать Podman и Buildah, которые ориентированы на работу без Docker Daemon и позволяют собирать образы в формате, совместимом с OCI.

Podman и Buildah: роль каждого инструмента

  • Buildah — сборщик образов. Он умеет работать с инструкциями уровня Dockerfile и собирать образы, совместимые с OCI.
  • Podman — движок для запуска и управления контейнерами/образами. Его важное преимущество — работа в режиме, не требующем Docker Daemon.

В связке с Termux вы получаете «локальный конвейер»: собрать образ → сохранить/передать → при необходимости запустить контейнер.

Подготовка Termux

Перед началом обновите пакеты. Рекомендуется работать в актуальной версии Termux и включить доступ к нужным ресурсам (хранилище/файловая система) через настройки приложения.

pkg update -y
pkg upgrade -y

Установим базовые инструменты, которые понадобятся почти всегда.

pkg install -y git proot-distro tar curl wget unzip

Далее — подготовим среду для сборки и работы контейнерных инструментов.

Варианты установки Podman/Buildah в Termux

В Termux нет единого «универсального» способа установить всё в виде пакетов apt, который одинаково работает на всех устройствах и версиях Android. Поэтому на практике используют один из подходов:

  • Через Linux‑окружение (например, в proot-distro) — как наиболее предсказуемый путь.
  • Через контейнеризацию самого окружения — когда вы запускаете сборку внутри контейнера, но это уже следующая ступень сложности.

Ниже приведён сценарий через proot-distro, поскольку он обычно проще для старта.

Создание Linux-окружения (proot-distro)

Развернём Debian-подобную среду. Замените имя дистрибутива при необходимости.

proot-distro install debian
proot-distro login debian --shared-tmp -- bash

Оказавшись внутри, обновите систему.

apt update -y
apt upgrade -y

Установка Podman и Buildah в Linux-окружении

В зависимости от версии Debian/репозиториев состав пакетов может отличаться. Как минимум, вам понадобятся Podman и Buildah. Попробуйте базовую установку.

apt install -y podman buildah

Если пакеты не находятся, проверьте актуальность репозиториев и доступность версий. В некоторых ситуациях рационально перейти на другой дистрибутив или использовать более современный источник сборочных пакетов (но это уже вопрос к конкретной платформе и версии окружения).

Концепция OCI‑образов: что вы получаете

OCI (Open Container Initiative) задаёт стандарты формата образов и структуры артефактов. В контексте Podman/Buildah это означает, что вы можете собирать образы, которые:

  • совместимы с OCI runtime-экосистемой;
  • зависят меньше от «docker-специфики»;
  • могут быть сохранены в виде переносимых артефактов.

Далее рассмотрим сборку минимального OCI‑совместимого образа без Docker Daemon.

Сборка образа с Buildah без Docker Daemon

Перейдите в рабочую директорию и создайте простой Dockerfile-эквивалент. Например, образ на основе alpine.

mkdir -p ~/oci-demo && cd ~/oci-demo

Создайте файл Containerfile (Buildah часто использует Containerfile/Dockerfile-подобный синтаксис).

cat > Containerfile <<'EOF'
FROM alpine:3.20
RUN apk add --no-cache ca-certificates
CMD ["sh", "-c", "echo OCI image from Termux && sleep 5"]
EOF

Теперь создайте билд через Buildah и соберите образ.

buildah bud -t oci-demo:latest .

Проверим, что образ появился в локальном хранилище.

podman images

На этом этапе вы уже собрали образ без участия Docker Daemon — только инструментами Buildah/Podman.

Экспорт OCI-артефактов: сохранить результат для переноса

Один из практических сценариев — экспортировать образ в файл, чтобы затем забрать его на другое устройство/в CI/на сервер. В зависимости от конфигурации окружения вы можете экспортировать образ как архив.

Пример экспорта в tar:

podman save -o oci-demo-latest.tar oci-demo:latest

Затем архив можно передать (например, через файловый менеджер Termux или по локальной сети в пределах вашего рабочего окружения).

Запуск контейнера в Podman

Запуск контейнера обычно делается так:

podman run --rm oci-demo:latest

Если контейнер выходит слишком быстро (у нас он спит 5 секунд), вы увидите вывод и процесс завершится.

Для интерактивного режима:

podman run --rm -it oci-demo:latest sh

Тонкости: права, user namespace и rootless-поведение

На мобильных устройствах особенно важны ограничения по правам и особенностям запуска процессов внутри proot. В большинстве случаев Podman поддерживает rootless-режим, но детали зависят от версии Podman и возможностей ядра/окружения.

С практической точки зрения:

  • начинайте с минимального примера;
  • если контейнер не стартует — смотрите логи и ошибки;
  • проверяйте, что пространство имён пользователя поддерживается в вашем окружении.

Сборка многостадийных образов и оптимизация

Когда вы переходите от «Hello world» к реальным проектам (например, сборка бинарника или сборка фронтенда), становится важной оптимизация размера и воспроизводимость. Buildah поддерживает практики многостадийных сборок.

Например, схема: stage сборки → stage рантайма.

cat > Containerfile <<'EOF'
FROM alpine:3.20 AS build
RUN apk add --no-cache gcc musl-dev
WORKDIR /src
RUN printf 'int main(){return 0;}' > main.c
RUN gcc -static -O2 main.c -o app

FROM alpine:3.20
COPY --from=build /src/app /app
CMD ["/app"]
EOF

buildah bud -t oci-demo-multi:latest .

Результат будет компактнее, чем если бы вы оставляли инструменты сборки в финальном слое.

Работа с локальной сетью (без обхода блокировок)

Если вам нужно тестировать сервис внутри контейнера с доступом из Termux (например, открыть локально страницы/эндпоинты), удобно организовать локальную сеть в рамках вашего устройства/вашей сети. При этом важно не использовать VPN для обхода ограничений.

В типовом случае вы публикуете порт контейнера наружу (в пределах доступной сети), а взаимодействие организуете обычным способом: прокси/порт‑форвардинг/доступ по адресу контейнера.

Пример (общая идея):

podman run --rm -p 8080:8080 <ваш_образ>

Конкретика зависит от сетевых возможностей окружения в Termux и режима запуска.

Частые проблемы и как их диагностировать

  • Образ не собирается: проверьте наличие зависимостей внутри окружения, лог сборки Buildah и корректность синтаксиса Containerfile.
  • Podman не запускает контейнер: проверьте ошибки rootless/namespace, доступность нужных возможностей ядра и корректность конфигурации.
  • Размер образа растёт: применяйте многостадийность, используйте минимальные базы (alpine/distroless-подход где доступно) и чистите кэш в RUN.
  • Сложно переносить артефакт: используйте podman save или экспортируйте слои/образы как архивы, чтобы забрать результат.

Практический чек-лист: от нуля до OCI-образа

  1. Обновите Termux пакеты: pkg update, pkg upgrade.
  2. Разверните Linux окружение через proot-distro.
  3. Установите podman и buildah внутри окружения.
  4. Создайте Containerfile.
  5. Соберите образ: buildah bud -t <tag> ..
  6. Проверьте: podman images.
  7. Запустите: podman run --rm <tag>.
  8. При необходимости экспортируйте: podman save -o <file>.tar <tag>.

Заключение

Termux отлично подходит для практической контейнеризации: используя Podman и Buildah, вы можете создавать OCI‑совместимые образы и запускать контейнеры без Docker Daemon. Это уменьшает трение при работе на мобильной среде и упрощает перенос артефактов между устройствами и этапами разработки.

Хотите быстрее внедрить такой подход в свои рабочие процессы? Команда РыбинскЛАБ поможет с настройкой, подбором окружения и выстраиванием конвейера сборки/тестирования под ваши задачи.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект