Легко створити Docker-образ і розгорнути Python Dash додаток за допомогою AWS Elastic Beanstalk

pic

Кредити: Katerina Limpitsouni (https://undraw.co). Дозвіл на використання надано

Я використовував Python Plotly Express і Dash для створення інформаційної панелі для вивчення місць дорожніх аварій. Ці модулі Python пропонують швидкий спосіб виконання завдання.

Додаток працює на моєму комп’ютері, але не в інших місцях. Щоб поділитися ним з друзями, я шукаю швидкий і простий спосіб розгорнути панель на Інтернеті. Heroku був би чудовим варіантом для хостингу панелі, але, на жаль, він припинив надавати безкоштовний тариф. Як підписник A Cloud Guru, я маю доступ до пісочниці трьох основних хмарних платформ як альтернатив.

Ця історія описує швидкий і простий спосіб розгортання веб-додатку на основі Elastic Beanstalk від Amazon Web Services (AWS).

  • Історія почнеться з введення в Docker, через який буде ілюстрована концепція побудови та розгортання портативних додатків.
  • Потім буде описано процедуру створення Docker-образу для додатку інформаційної панелі і запуску цього образу в контейнері, який містить усе необхідне для виконання.
  • Історія продовжиться демонстрацією використання AWS Elastic Beanstalk для часткової автоматизації створення та запуску Docker-образів на хмарі Amazon, і завершиться URL для завантаження панелі додатку.

Docker

Ось як Docker (компанія) описує Docker.

Docker — це платформа, призначена для допомоги розробникам у створенні, обміні та запуску сучасних додатків. Ми займаємося нудним налаштуванням, щоб ви могли зосередитись на коді.

Код (інформаційна панель) готовий. Тепер Docker має подбати про нудне налаштування, щоб код міг бути виконаний на платформі Docker, а також в інших місцях, що підтримують Docker.

Docker-образ є критично важливим елементом для цього. Це виконуваний файл, що містить вихідний код додатка та дані файли, інструкції для побудови середовища виконання та інші підтримуючі файли.

Більшість інструкцій для побудови додатка панелі насправді досить очевидні:

(1) Python runtime (певної версії).

(2) сторонні Python модулі, які потрібно встановити.

(3) основна програма для виконання (app.py).

(4) файли, які потрібно включити/виключити.

(5) підтримка мережі (наприклад, номер порту 8050) та інших типів ресурсів.

Створення Docker-образу для панелі

Створення Docker-образу вимагає повного набору активів додатка та файлу, званого Dockerfile, який містить інструкції для побудови. Нижче показано структуру активів додатка панелі (вихідний код та файл даних). Якщо потрібно, завантажте вихідний код з мого Github репозиторію.

pic

Dockerfile для панелі містить послідовність інструкцій.

FROM python:3.7  
ENV DASH_DEBUG_MODE True  

COPY ./data/ /data/  
COPY ./app.py /app.py  
COPY ./requirements.txt /requirements.txt  

WORKDIR /  

RUN set -ex && \  
 pip install -r requirements.txt  
EXPOSE 8050  
CMD ["python", "app.py"]
  • Вказати версію Python 3.7
  • Встановити режим відлагодження Dash на True (або False)
  • Три команди COPY дозволяють переміщати файли з хостової системи в Docker-образ.
    Зазвичай структура повинна зберігатися.
  • Команда WORKDIR вказує робочий каталог в образі.
  • Команда RUN вказує команди на етапі побудови образу, і тут встановлюються модулі, зазначені в requirements.txt.
  • Команда EXPOSE оголошує номер порту, який використовує додаток.
  • Команда CMD вказує основну програму для розгортання образу в контейнері.

Dockerfile повинен бути розміщений на найвищому рівні структури каталогу. Згідно з Dockerfile, підтримуючий файл requirements.txt також має бути на найвищому рівні.

pic

Файли для побудови Docker-образу тепер підготовлені в каталозі, званому $APP_ROOT. Наступний крок передбачає, що Docker та його командний рядок (CLI) були встановлені — будь ласка, завантажте та встановіть Docker, якщо це ще не зроблено.

Відкрийте термінал (наприклад, вікно CMD), змініть каталог на $APP_ROOT і виконайте наступну команду. Опція -t вказує ім'я образу (docker-dash-roadcrash).

docker build -f Dockerfile -t docker-dash-roadcrash .

Це займе близько 30 секунд для завершення побудови та збереження образу локально в файловій системі. Запустіть Docker Client, щоб показати всі образи в локальному сховищі Docker.

pic

Запуск Docker-образу на платформі Docker

Оскільки образ готовий, спробуємо розгорнути його на локальній платформі Docker. На вище показаному інтерфейсі Docker Client натисніть кнопку Відтворити під стовпцем Дії, щоб виконати образ в контейнері. Нижче наведені повідомлення, що з'являються в журналі (доступні через Docker Client), показують, що додаток успішно запущений і слухає на вказаних URL.

The shape before cleansing (367230, 51)  
The shape after cleansing (366632, 4)  
Dash is running on http://0.0.0.0:8050/  

 * Serving Flask app 'app'  
 * Debug mode: off  
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.  
 * Running on all addresses (0.0.0.0)  
 * Running on http://127.0.0.1:8050  
 * Running on http://172.17.0.2:8050  
Press CTRL+C to quit

Альтернативно, використовуйте команду CLI run для виконання того ж самого.

docker run -p 8050:8050 docker-dash-roadcrash

Ця ілюстрація демонструє вищезгадану процедуру, яку можна поділити на основні операції Docker: build і run. Операція build призводить до створення Docker-образу, який можна вважати шаблоном для Docker-контейнера, середовища для виконання додатка.

pic

Одноетапне розгортання веб-додатка за допомогою AWS Elastic Beanstalk

Хмарне розгортання веб-додатків має безліч переваг (які тут не обговорюються). З навичками контейнеризації Docker варіанти хмарного розгортання численні, наприклад:

(1) завантажити локальний Docker-образ в хмарний контейнерний репозиторій, а потім запустити образ, використовуючи обчислювальні ресурси там.

(2) встановити Docker на хмарний віртуальний комп'ютер і потім створювати та запускати образи там.

(3) використовувати командний рядок (CLI) хмарної платформи для створення образу з файлів додатку та Dockerfile і завантаження образу в хмарний контейнерний репозиторій для розгортання.

AWS, будучи однією з найбільш комплексних хмарних платформ, готовий до кожного з вищезгаданих варіантів і більше. Ця історія описує, мабуть, найпростіший метод — одноетапне розгортання веб-додатку за допомогою AWS Elastic Beanstalk.

  1. Увійдіть в консоль AWS і перейдіть на сторінку Elastic Beanstalk (використовуйте Пошукову панель).
  2. Натисніть кнопку Створити додаток.

pic

  1. Введіть ім'я додатка.

pic

4.
Виберіть Docker як платформу для розгортання.

pic

  1. Виберіть Завантажити ваш код.

pic

AWS очікує на ZIP-файл, що містить Dockerfile (на найвищому рівні) та ресурси додатка. Також важливо, щоб ZIP-файл не мав верхнього рівня папки. Іншими словами, після розпакування ZIP-файлу Dockerfile та інші файли не повинні бути в папці верхнього рівня.

Особливо користувачам MacOS слід створювати ZIP-файл, вибираючи файли для стиснення, а не вибираючи папку, що містить файли.

pic

  1. Натисніть кнопку Вибрати файл, щоб завантажити ZIP-файл.

pic

  1. Після натискання кнопки Створити додаток починається процес розгортання. Процес займає кілька хвилин, і виводиться журнал процесу. Elastic Beanstalk налаштовує все необхідне для додатка.

pic

  1. Якщо розгортання успішне, з'явиться наступне.

pic

  1. Натисніть на посилання (під Roadcrashdash-env), щоб завантажити панель приладів у браузері.

pic

Чудово! Все, що потрібно, це заповнити веб-форму, і додаток буде працювати в хмарі через кілька хвилин.

Підсумки

Наступна ілюстрація демонструє, як операції Docker передаються на AWS Elastic Beanstalk, який автоматично створює середовище виконання, яке має вбудовану масштабованість, надійність та гнучкість.

pic

Дякуємо за те, що прочитали це. Сподіваюся, що ви знайшли цей контент корисним.

Схожі статті

Джерела

[1] AWS, Створення пакету вихідних файлів додатка. Отримано онлайн з https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html

Перекладено з: Dockerize and Deploy a Python Dash Application easily with AWS Elastic Beanstalk

Leave a Reply

Your email address will not be published. Required fields are marked *