TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #168 1.36K
Масштабируемое развертывание приложений с Bash и Docker

😎 Основная идея:

Проверять текущую загрузку CPU/памяти
Автоматически запускать дополнительные контейнеры при высокой нагрузке
Останавливать лишние контейнеры при снижении нагрузки

▪️ Bash-скрипт для масштабирования


#!/bin/bash

APP_NAME="myapp"
IMAGE="myapp_image"
LIMIT=70 # Порог загрузки CPU в процентах
MAX_CONTAINERS=5

# Получаем текущую загрузку CPU
CPU_LOAD=$(awk '{print $1}' <(grep 'cpu ' /proc/stat | awk '{print ($2+$4)*100/($2+$4+$5)}'))

# Получаем текущее количество запущенных контейнеров
RUNNING_CONTAINERS=$(docker ps -q -f "name=$APP_NAME" | wc -l)

if (( $(echo "$CPU_LOAD > $LIMIT" | bc -l) )); then
if (( RUNNING_CONTAINERS < MAX_CONTAINERS )); then
echo "Высокая нагрузка ($CPU_LOAD%). Запускаем новый контейнер..."
docker run -d --name "$APP_NAME-$RUNNING_CONTAINERS" $IMAGE
else
echo "Достигнут лимит контейнеров ($MAX_CONTAINERS)."
fi
else
if (( RUNNING_CONTAINERS > 1 )); then
STOP_CONTAINER=$(docker ps -q -f "name=$APP_NAME" | tail -n 1)
echo "Нагрузка низкая ($CPU_LOAD%). Останавливаем контейнер $STOP_CONTAINER..."
docker stop $STOP_CONTAINER && docker rm $STOP_CONTAINER
fi
fi


⚙️ Как использовать?

1. Сохраните скрипт, например, как autoscale.sh
2. Сделайте его исполняемым:


chmod +x autoscale.sh


3. Настройте запуск через cron (например, каждые 5 минут):


crontab -e


Добавьте строку:


*/5 * * * * /path/to/autoscale.sh >> /var/log/autoscale.log 2>&1


🏳️ Что получаем:

При нагрузке выше 70% добавляются контейнеры
При снижении нагрузки контейнеры удаляются
Управление происходит автоматически

BashTex 📱 #bash
  • 👍 12
  • 🫡 1
More from @bash_tex
  1. Oct 13, 2026openat2(): как Linux защищает от выхода за пределы каталога Допустим, приложение должно чи…
  2. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  3. Oct 9, 2026BashTex 📱 #мем
  4. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  5. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  6. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →