Приветствую вас, друзья! Сегодня мы научимся разворачивать бота с помощью Docker. Многие новички думают, что Docker — это сложно, но прочитав эту статью, вы поймете, что это не так, и вам понравится эта технология.

Отказ от ответственности

Целью данного руководства является не обучение Docker, а пример использования этой технологии в контексте телеграм-ботов на айограмме 3. Я не буду сильно зацикливаться на таких вещах, как слои, объем, docker-compos, мост и прочей технической информации. на более глубоком уровне, чем необходимо для развертывания ботов на VPS-сервере.

Далее вы получите пример использования Docker и общее описание методов (команд). Если вам нужны мои обучающие статьи по Docker, дайте мне знать любым удобным для вас способом.

Подготовка

Во-первых, вам нужно получить базу данных PostgreSQL. О том, как развернуть его на VPS сервере, я писал ЗДЕСЬ. Вам также потребуется установить Docker. Новичкам будет удобнее установить Docker Desktop; если вы уже знакомы с технологией, используйте консольный вариант.

  1. Установите Docker и запустите его.

  2. Проверьте установку командой: docker –version

Если Docker установлен, вы получите ответ с указанием установленной на данный момент версии. у меня так:

Docker version 26.1.1, build 4cf5afa

Потом я открою эту папку через Pycharm, но вы можете вводить все команды через CMD, PowerShell, терминал и т.д.

Мы обсуждали возможности бота ЗДЕСЬ, но сейчас сосредоточимся на Docker.

Если у вас есть собственный проект, который вы хотели бы запустить на VPS-сервере, также читайте дальше — я постарался сделать это руководство универсальным.

Если вы клонировали репозиторий, то сможете найти там следующие файлы:

Вы видите знакомую структуру с тремя новыми файлами:

  • .dockerignore

  • Докер-файл

  • Makefile

Основной файл — DockerFile. Вот его содержание:

FROM python

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["/bin/bash", "-c", "python aiogram_run.py"]

Объяснение строк Dockerfile:

  1. FROM python: использует официальный образ Python.

  2. WORKDIR /usr/src/app: определяет рабочий каталог.

  3. COPY requirements.txt ./: копирует файл зависимостей.

  4. RUN pip install --no-cache-dir -r requirements.txt: Устанавливает зависимости.

  5. COPY . .: копирует все файлы.

  6. CMD ["/bin/bash", "-c", "python aiogram_run.py"]: запускает сценарий.

Немного кулинарной теории

Образ в контексте Docker — это своего рода шаблон или снимок, содержащий все необходимое для запуска приложения. Изображение включает в себя:

  1. Операционная система (или ее часть).

  2. Программы и библиотеки, необходимые для работы приложения.

  3. Само приложение и его файлы.

Воспринимайте изображение как рецепт блюда: оно содержит все ингредиенты и инструкции по приготовлению этого блюда. Когда вы запускаете контейнер, Docker использует этот образ для создания рабочей среды для вашего приложения.

В конце концов мы создадим образ с ботом и затем будем использовать его в созданном контейнере.

ЧИТАТЬ   Беларусь разместила ракетные комплексы на западных границах

Контейнер — это работающий экземпляр изображения. Он функционирует как небольшая отдельная виртуальная машина или изолированная среда, в которой работает ваше приложение.

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

Надеюсь, я объяснил это ясно.

.dockerignore

Этот файл работает так же, как .gitignore, за исключением того, что здесь мы настраиваем его так, чтобы он игнорировал файлы, которые не будем включать в наш образ Docker.

Makefile

Makefile упрощает процесс создания и запуска контейнера Docker. Пример создания файла:

run:
	docker run -it -d --env-file .env --restart=unless-stopped --name easy_refer easy_bot_image
stop:
	docker stop easy_refer
attach:
	docker attach easy_refer
dell:
	docker rm easy_refer

Чтобы использовать Makefile, Make должен быть установлен в используемой вами операционной системе. О том, как установить Make и что это вообще такое, я написал в этом посте по ССЫЛКЕ.

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

Обязательные команды

Сегодня нам понадобится:

Чтобы создать образ Docker, нам понадобится Dockerfile (описан выше). Затем просто зайдите в папку, где находится этот файл, и введите следующую команду:

docker build -t name_image .

Объяснение:

  1. сборка докера:

  2. -t имя_изображения:

    • Опция -t (или —tag) указывает тег для создаваемого изображения. Тег состоит из имени и, при необходимости, версии в формате имя:тег. В этом случае изображение будет называться image_name. Если версия (тег) не указана, Docker по умолчанию использует последний тег.

  3. . (указывать):

    • Эта часть определяет контекст построения. Точка указывает текущий каталог. Это означает, что Docker будет искать Dockerfile и все необходимые файлы в текущем каталоге для создания образа.

Пример

docker build -t easy_bot_image .

Поскольку мы указали в Dockerfile FROM python – образ Python будет автоматически извлечен из Docker Hub. Поскольку Python написан без тегов, будет установлена ​​последняя версия.

Чтобы просмотреть все установленные вами образы, используйте команду:

docker images

Одним из изображений будет то, которое вы создали. Кроме того, для взаимодействия с этим изображением вам нужно будет просто указать имя, которое вы передали после -t или его ID IMAGE (достаточно первых 2-3 символов, если они уникальны). Я буду использовать название изображения.

Теперь все, что нам нужно сделать, это создать контейнер и запустить его.

Команда create отвечает за создание контейнера, а команда start — за его запуск, но мы можем объединить эти две команды с помощью run (синтаксический сахар).

При выполнении команды запуска есть один обязательный параметр — это имя или идентификатор образа, который будет служить основой для контейнера. Также есть дополнительные настройки, задаваемые с помощью флагов.

ЧИТАТЬ   Подпольщик сообщил о нападениях на энергообъекты в Сумской области

Давайте посмотрим на команду:

docker run -it -d --env-file .env --restart=unless-stopped --name easy_refer easy_bot_image 

Объяснение:

  1. выполнение докера:

  2. -он:

    • -i (интерактивный): запускает контейнер в интерактивном режиме, позволяя вам взаимодействовать с его стандартным вводом.

    • -t (tty): подключает терминал к контейнеру, чтобы вы могли получить доступ к его командной строке.

  3. :

  4. —env-файл .env:

  5. —restart=если не остановлено:

    • Автоматически перезапускает контейнер в случае сбоя, но не перезапускает его, если он был остановлен вручную.

  6. —name easy_refer:

  7. easy_bot_image:

Что делает эта команда:

  • Запускает новый контейнер на основе образа easy_bot_image.

  • Назовите контейнер easy_refer.

  • Загружает переменные среды из файла .env.

  • Запускает контейнер в интерактивном режиме с подключенным терминалом, но в фоновом режиме.

  • Настраивает контейнер на автоматический перезапуск в случае сбоя, но не на перезапуск, если он остановлен вручную.

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

Вот параметры, которые должны быть в файле:

TOKEN=bot_token
ADMINS=список телеграмм айди админов
PG_LINK=ссылка на подключение к постгрес
ROOT_PASS=доп пароль для работы с базой данных

Видим, что бот запустился. Стоит отметить, что даже если у вас в операционной системе вообще не было Python, этот метод сработает и бот запустится.

Посмотрим, какие контейнеры у нас есть (работающие или нет):

docker ps -a

Мы видим, что контейнер запущен.

Давайте остановим контейнер, а затем удалим его. Далее проверим контейнер:

docker stop easy_refer
docker rm easy_refer
docker ps -a

Теперь давайте создадим новый контейнер с помощью Make:

make run

Да, мы получили тот же результат. Согласитесь, это практично.

Теперь зайдем в работающий контейнер и посмотрим, что там происходит:

docker attach easy_refer

Таким образом мы вошли во внутреннюю операционную систему нашего контейнера. Внутри мы видим те же логи, что и при обычном запуске. Мы можем немедленно остановить контейнер с помощью комбинации клавиш CTRL+C (если внутри контейнера ничего не происходит, он останавливается) или выйти из интерактивного режима (перевести контейнер обратно в фоновый режим).

Для этого нужно нажать комбинацию клавиш CTRL+pа потом CTRL+q.

Примечание. Если бы мы не указали флаг -it при создании контейнера, не было бы возможности выйти из интерактивного режима с помощью приведенной выше комбинации клавиш.

Давайте еще раз удалим наш контейнер, чтобы он не занимал место, и приступим к непосредственному развертыванию на VPS-сервере.

Загрузите изображение в Docker Hub.

  1. Выполните авторизацию на сайте Docker Hub.

  2. Переименуйте изображение, присвоив ему имя в следующем формате:

docker_username/image_name

Пример в моем случае:

docker tag easy_bot_image yakvenalexx/easy_bot_image

Авторизация:

docker login

Теперь мы продвигаем наш имидж

docker push yakvenalexx/easy_bot_image

Мы видим, что все прошло хорошо. Теперь зайдем в профиль на Docker Hub и проверим, есть ли у нас там репозиторий:

ЧИТАТЬ   Магнитогорского блогера арестовали на 8 суток за розыгрыш на кровати в ТЦ

Репозиторий запущен, а это значит, что мы завершили подготовку к развертыванию. Теперь вы можете удалить ненужные изображения с локального компьютера. В моем случае это:

docker rmi easy_bot_image yakvenalexx/easy_bot_image

Большой! Теперь подключитесь к нашему VPS-серверу (я буду использовать Ubuntu) и запустите там Docker (используя в качестве примера SSH-соединение с именем пользователя и паролем).

SSH-соединение:

ssh user@host
password

Обновление и установка Docker:

sudo apt update -y 
sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL  | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce
sudo systemctl status docker

Статус должен выглядеть так:

Метка установки:

sudo apt install make

Теперь вы можете проверить докер и сделать версии.

docker --version
make --verson

Если в обоих случаях мы видим версию, значит все установлено.

Всё хорошо

Всё хорошо

Большой. Теперь давайте создадим папку с именем my_bot и поместим в нее файл .env и Makefile.

cd ../home
mkdir my_bot
cd my_bot

Теперь давайте загрузим изображение. Для этого мы можем получить доступ к профилю в Docker Hub и найти там кнопку «Копировать»:

Нажмите на него и вставьте команду в терминал VPS-сервера.

Нажмите на него и вставьте команду в терминал VPS-сервера.

docker pull yakvenalexx/easy_bot_image

Будьте осторожны здесь. Убедитесь, что Makefile содержит правильное имя образа. Если нет, исправьте файл на сервере через nano или загрузите правильный файл любым удобным для вас способом.

Давайте начнем:

make run

Давайте посмотрим на контейнер и убедимся, что все работает:

make attach
Сразу станет чисто. Важно, чтобы после входа в систему ваша программа создавала логи.

Сразу станет чисто. Важно, чтобы после входа в систему ваша программа создавала логи.

Заключение

Docker позволяет легко создавать и развертывать приложения в изолированных контейнерах. С помощью этого руководства вы сможете запустить своего бота на VPS-сервере, даже если раньше ничего не знали о Docker. Надеюсь, теперь вы понимаете, как эта технология может сделать вашу работу проще и эффективнее.

Если у вас есть какие-либо вопросы или вам нужна дополнительная информация, пожалуйста, не стесняйтесь обращаться к нам.

Хотите увидеть мою серию статей о Docker? Подписывайтесь на обновления и ставьте лайк, чтобы не пропустить новые материалы. Ваша поддержка очень важна для меня, ведь без нее все усилия, затраченные на создание контента, бессмысленны.

Source

От admin