Вітаю всіх з 2025 роком і бажаю вам щасливого Нового року! Бажаю всього найкращого цього року та в майбутньому.
Протягом останніх кількох місяців я зосередився на вдосконаленні своїх навичок Python. Як інженер DevOps з досвідом у сфері інфраструктури, програмування не завжди було моєю сильною стороною. Однак із розвитком моєї ролі потреба у навичках програмування зростає.
Одна з цікавих особливостей роботи в DevOps полягає в тому, що жодна роль не є такою ж, як інша. Однією може бути вимога знань Terraform і shell-скриптів, а іншою — експертиза у Groovy та Python. Хоча відсутність стабільності між ролями може бути викликом, мені подобається ця різноманітність — це робить роботу цікавою!
Мій останній проєкт: "Trading212 Portfolio Poller"
Як я вже згадував, я працюю над вдосконаленням своїх навичок Python. Найкращий спосіб навчатися — це братися за реальні проєкти! Окрім роботи, я маю велику пристрасть до фінансів і інвестую свої гроші в акції.
Однією з платформ, яку я використовую, є Trading212, яка пропонує різноманітні варіанти інвестування і має API з багатим функціоналом.
Щоб поєднати свої інтереси та вдосконалити навички Python, я вирішив створити додаток, який:
- Осуває API Trading212 для отримання даних про інвестиції.
- Записує отримані дані в базу даних MongoDB.
- Виставляє API-дані та деяку інформацію, збережену в базі, через кінцеві точки Flask.
Так бачить проєкт "Trading212 Portfolio" DALL·E, з точки зору технологічного стеку!
Написання коду Python
Щоб контейнеризувати Python-додаток, спершу потрібно мати працюючий Python-додаток! Хоч мій проєкт ще знаходиться на етапі розробки, код вже доступний на GitHub.
Залежно від вашої ролі як інженера DevOps, ви можете або писати код додатку самостійно, або не писати його. У моєму випадку цей проєкт дозволив мені покращити мої навички Python, залишаючись в межах моєї експертизи DevOps.
Контейнеризація Python-додатку
Контейнеризація додатку була логічним вибором. Як інженер DevOps, робота з Docker та Kubernetes є частиною моєї щоденної рутини. Цей проєкт дозволив мені одночасно покращити як навички Python, так і навички контейнеризації.
Ось як я створив Docker-образ для основного Python-додатку:
- Базовий образ: Я використав Alpine Python образ — легкий варіант, який дозволяє зберегти розмір контейнера мінімальним. Базовий образ Alpine має всього 5 МБ, а з Python, моїм кодом додатку та залежностями загальний розмір складає близько 90 МБ. Є ще можливості для оптимізації. (Досліджуйте образи Python на Docker Hub.)
- Параметри збірки: Я налаштував параметри збірки для передачі конфігураційних даних, включаючи мій API токен Trading212. Хоча це працює для локальної розробки, цей метод не є безпечним для продакшн-середовища або публічних репозиторіїв. Я заміню цей підхід на більш безпечний, коли буду розгортати додаток в Kubernetes. (Дізнайтесь більше про Dockerfile ARG.)
- Залежності: Я встановив необхідні залежності за допомогою
pip
. Список залежностей невеликий, але важливий. (Дивіться requirements.txt файл.) - Код додатку: Я скопіював код додатку в образ контейнера. (Перегляньте Dockerfile COPY.)
- Відкритий порт: Я відкрив порт 5000, стандартний порт Flask. (Перегляньте Dockerfile EXPOSE.)
- Команда: Я налаштував команду за замовчуванням для запуску додатку, коли контейнер стартує.
Привіт усім, вітаю вас з 2025 роком і бажаю щасливого Нового року! Бажаю всього найкращого цього року і в майбутньому.
Протягом останніх кількох місяців я зосередився на вдосконаленні своїх навичок Python. Як інженер DevOps з досвідом в інфраструктурі, програмування не завжди було моєю сильною стороною. Однак із розвитком моєї ролі потреба в експертизі програмування зросла.
Одна з цікавих особливостей роботи в DevOps полягає в тому, що кожна роль унікальна. В одній позиції може знадобитися майстерність у Terraform та shell-скриптах, в іншій — експертиза у Groovy та Python. Хоча відсутність постійності між ролями може бути складною, я люблю цю різноманітність — вона робить роботу захоплюючою!
Мій останній проєкт: «Trading212 Portfolio Poller»
Як я вже згадував, я працюю над вдосконаленням своїх навичок Python. Найкращий спосіб навчатися — це застосовувати знання на практиці! Поза роботою, я маю велику пристрасть до фінансів і інвестую свої кошти в акції.
Однією з платформ, яку я використовую, є Trading212, що пропонує різноманітні варіанти інвестування та має функціональне API.
Щоб поєднати свої інтереси і покращити навички Python, я вирішив створити додаток, який:
- Осуває API Trading212 для отримання даних про інвестиції.
- Записує отримані дані в базу даних MongoDB.
- Виставляє дані API та деяку інформацію, збережену в базі, через кінцеві точки Flask.
Що DALL·E вважає, що мій «Trading212 Portfolio Project» виглядатиме з точки зору технологічного стеку!
Написання коду Python
Щоб контейнеризувати Python-додаток, спершу потрібен працюючий Python-додаток! Хоча мій проєкт ще в процесі розробки, ви можете знайти код на GitHub.
Залежно від вашої ролі як інженера DevOps, ви можете або писати код додатку самі, або не писати його. У моєму випадку цей проєкт дозволив мені вдосконалити мої навички Python, при цьому зберігаючи зв'язок з моєю експертизою в DevOps.
Контейнеризація Python-додатку
Контейнеризація додатку була природним вибором. Як інженер DevOps, робота з Docker та Kubernetes є частиною моєї щоденної рутини. Цей проєкт дозволив мені одночасно покращити як навички Python, так і навички контейнеризації.
Ось як я створив Docker-образ для основного Python-додатку:
- Базовий образ: Я використав Alpine Python образ — легкий варіант, який дозволяє зберегти розмір контейнера мінімальним. Базовий образ Alpine важить всього 5 МБ, а з Python, моїм кодом додатку та залежностями загальний розмір складає близько 90 МБ. Є ще можливості для оптимізації. (Досліджуйте образи Python на Docker Hub.)
- Параметри збірки: Я налаштував параметри збірки для передачі конфігураційних даних, включаючи мій API токен Trading212. Хоча це працює для локальної розробки, цей підхід не є безпечним для продакшн-середовища або публічних репозиторіїв. Я заміню цей підхід на більш безпечний, коли буду розгортати додаток у Kubernetes. (Дізнайтесь більше про Dockerfile ARG.)
- Залежності: Я встановив необхідні залежності за допомогою
pip
. Список залежностей невеликий, але критично важливий. (Дивіться requirements.txt файл.) - Код додатку: Я скопіював код додатку в образ контейнера. (Перегляньте Dockerfile COPY.)
- Відкритий порт: Я відкрив порт 5000, стандартний порт Flask. (Перегляньте Dockerfile EXPOSE.)
- Команда: Я налаштував команду за замовчуванням для запуску додатку, коли контейнер стартує.
(Перегляньте Dockerfile CMD.)
Для підтримки локальної розробки мені також потрібна була база даних MongoDB. Я створив стек Docker Compose, щоб одночасно запускати контейнер додатку та контейнер MongoDB.
Висновок
Сподіваюся, ця стаття дала вам загальне уявлення про контейнеризацію додатка на Python.
На мою думку, найкращий спосіб навчатися — це робити. Я рекомендую написати невеликий Python-додаток, щоб вирішити проблему для себе або інших. Це допоможе вам зберегти інтерес до розвитку своїх навичок.
Є багато чудових ресурсів для вивчення програмування на Python та Docker, але ось кілька рекомендацій, щоб почати:
Програмування на Python:
Docker:
Які ваші улюблені способи розвивати свої навички поза межами щоденних обов'язків? Поділіться своїми думками в коментарях!
(Перегляньте Dockerfile CMD.)
Для підтримки локальної розробки мені також була потрібна база даних MongoDB. Я створив стек Docker Compose, щоб одночасно запускати контейнер додатку та контейнер MongoDB.
Висновок
Сподіваюся, ця стаття дала вам загальне уявлення про контейнеризацію додатка на Python.
На мою думку, найкращий спосіб навчатися — це робити. Я рекомендую написати невеликий Python-додаток для вирішення проблеми для себе або для інших. Це допоможе зберігати інтерес під час розвитку ваших навичок.
Є багато чудових ресурсів для вивчення програмування на Python та Docker, але ось кілька рекомендацій, щоб почати:
Програмування на Python:
Docker:
Які ваші улюблені способи розширювати свої навички поза межами щоденних обов'язків? Поділіться своїми думками в коментарях!
Перекладено з: Building a Simple Containerized Python Application