Termux превращает Android‑устройство в полноценную Linux‑среду, а Docker позволяет упаковывать микросервисы в изолированные контейнеры. В этой статье мы рассмотрим, как развернуть Docker внутри Termux, собрать набор микросервисов и управлять ими с помощью docker и docker-compose. Всё это работает без необходимости рутировать устройство.
Подготовка среды Termux
Сначала установим и обновим базовые пакеты Termux.
apt update && apt upgrade -y
Установим необходимые утилиты:
apt install -y proot-distro curl wget git
Установка Linux‑дистрибутива через proot-distro
Для полноценного Docker‑движка удобно использовать лёгкий дистрибутив, например, Ubuntu 22.04.
proot-distro install ubuntu-22.04
Запускаем установленный дистрибутив:
proot-distro login ubuntu-22.04
После входа в окружение Ubuntu обновим пакеты:
apt update && apt upgrade -y
Установка Docker внутри Ubuntu
Внутри дистрибутива установим Docker по официальной инструкции.
apt install -y ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Запускаем демон Docker (в Proot‑окружении требуется использовать dockerd в фоновом режиме):
dockerd &
Проверяем работоспособность:
docker version
Создание микросервисов
Рассмотрим простой набор из трёх сервисов: frontend, api и db. Каждый сервис будет упакован в отдельный Docker‑образ.
1. API‑сервис – небольшое приложение на Node.js.
mkdir -p ~/projects/api && cd ~/projects/api
cat > Dockerfile <<'EOF'
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
EOF
cat > package.json <<'EOF'
{
"name": "api",
"version": "1.0.0",
"main": "index.js",
"dependencies": {"express": "^4.18.2"}
}
EOF
cat > index.js <<'EOF'
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello from API'));
app.listen(3000, () => console.log('API listening on 3000'));
EOF
Собираем образ:
docker build -t myapi:latest .
2. Frontend‑сервис – статический сайт на Nginx.
mkdir -p ~/projects/frontend && cd ~/projects/frontend
cat > Dockerfile <<'EOF'
FROM nginx:alpine
COPY ./html /usr/share/nginx/html
EOF
mkdir -p html && echo 'Welcome to Frontend
' > html/index.html
Собираем образ:
docker build -t myfrontend:latest .
3. База данных – готовый образ PostgreSQL.
Для неё отдельный Docker‑образ не требуется – будем использовать официальную postgres:15.
Оркестрация с docker-compose
Создадим файл docker-compose.yml, описывающий взаимодействие сервисов.
mkdir -p ~/projects/compose && cd ~/projects/compose
cat > docker-compose.yml <<'EOF'
version: '3.9'
services:
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- db-data:/var/lib/postgresql/data
ports:
- "5432:5432"
api:
image: myapi:latest
depends_on:
- db
environment:
DATABASE_URL: postgres://user:secret@db:5432/appdb
ports:
- "3000:3000"
frontend:
image: myfrontend:latest
depends_on:
- api
ports:
- "8080:80"
volumes:
db-data:
EOF
Запускаем стек:
docker compose up -d
Проверяем статус:
docker compose ps
После запуска сервисов можно открыть браузер Android и перейти по адресу http://127.0.0.1:8080 – вы увидите страницу фронтенда, которая общается с API, а API в свою очередь использует PostgreSQL.
Мониторинг и управление контейнерами
Для быстрого доступа к логам используем:
docker compose logs -f
Для масштабирования отдельного сервиса (например, увеличить количество реплик API) применяем:
docker compose up -d --scale api=3
Остановка и удаление всего стека:
docker compose down -v
Оптимизация работы в Termux
- Выделяйте отдельный
swapфайл внутри Proot‑окружения, если планируете запускать тяжёлые сервисы. - Ограничивайте количество одновременно работающих контейнеров, учитывая ограниченные ресурсы мобильного процессора.
- Для постоянного доступа к Docker‑демону используйте
tmuxилиnohupпри запускеdockerd.
Заключение
Termux в сочетании с Docker открывает возможности полноценного микросервисного стека прямо на вашем Android‑устройстве. Это удобный способ для разработки, тестирования и демонстрации сервисов без необходимости в отдельном сервере.
Если вам требуется профессиональная настройка CI/CD, контейнеризация legacy‑приложений или консалтинг по облачным решениям, команда RybinskLab готова помочь. Мы предлагаем услуги по автоматизации развёртывания, мониторингу и поддержке микросервисных архитектур под любые задачи.