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

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

Развёртывание и управление микросервисами с Docker в Termux

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 готова помочь. Мы предлагаем услуги по автоматизации развёртывания, мониторингу и поддержке микросервисных архитектур под любые задачи.

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

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю IT-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса.

Связаться со мной