🐳 Этап 7: Docker и деплой

🐳 Этап 7: Docker и деплой


Вы написали крутое приложение: фронтенд на React, бэкенд на Python или Node.js, подключили PostgreSQL. На вашем компьютере (localhost) всё работает идеально. Вы скидываете код другу, он запускает... и у него всё падает. Разные версии языка, не та операционная система, забыли поставить базу данных.

Чтобы навсегда забыть фразу «а у меня на компе всё работало», индустрия пришла к контейнеризации.

📦 1. Что такое Docker и почему без него никуда

Сегодня Docker — это уже не «плюс в резюме» как 5 лет назад, а базовое требование почти в любой backend-вакансии. Если вы не понимаете контейнеры, вас просто не подпустят к продакшену.

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

базовые понятия:

  • image (образ): шаблон или чертеж вашего приложения (например, чистый linux с установленным python 3.10 и вашим кодом);
  • container (контейнер): запущенный экземпляр образа (конкретная рабочая программа).

Без примера Docker кажется абстракцией. Вот так выглядит минимальный реальный Dockerfile для Python-приложения:

Dockerfile

FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Всего 5 строк, и ваше приложение готово к запуску на любом сервере мира.

🏗 2. Docker Compose и Nginx (реальная архитектура)

В реальных проектах почти никогда не запускают один голый контейнер. Приложение редко состоит из одного сервиса. Обычно это бэкенд + база данных (PostgreSQL) + кэш (Redis).

как этим управлять:

  • docker-compose: инструмент, который позволяет запустить сразу все нужные контейнеры одной командой, автоматически настроив закрытую локальную сеть между ними;
  • nginx: в продакшене перед вашим приложением обычно ставят reverse proxy (обратный прокси-сервер). nginx принимает все входящие HTTP-запросы из интернета и грамотно перенаправляет (проксирует) их в нужный контейнер с вашим бэкендом, попутно раздавая статику (картинки, html) и обеспечивая безопасность.

🚀 3. Деплой

Ваш код готов. Теперь нужно, чтобы им могли пользоваться другие люди через интернет. В 2026 году чаще всего деплой — это не «залить файлы на сервер через FTP», а собрать Docker-образ и запустить его в облаке.

где размещать проект:

  • vps (virtual private server): вы арендуете виртуальный сервер (удаленный компьютер на linux), подключаетесь к нему по ssh, ставите docker и запускаете свой проект. это дешево, дает полный контроль, но всё настраиваете вы сами;
  • paas (platform as a service): платформы вроде render, heroku или railway. вы просто даете им ссылку на свой github-репозиторий, а они сами собирают docker-образ и запускают проект. это очень просто, но дороже.

🔄 4. CI/CD (автоматизация рутины)

  • continuous integration (ci): как только вы пушите код в github, запускаются автоматические проверки (например, не сломали ли вы тесты);
  • continuous deployment (cd): если проверки пройдены, код автоматически отправляется на сервер и обновляет ваше приложение без вашего участия;
  • стандарт для старта: github actions.

Про GitHub Actions: я имею в виду, что для новичков (да и для многих коммерческих проектов) это самый доступный и бесплатный инструмент, чтобы на практике понять, что такое CI/CD. Раньше приходилось поднимать отдельные сервера с Jenkins, а сейчас достаточно положить .yaml файлик в папку .github/workflows в своем репозитории, и GitHub сам бесплатно запустит тесты и отправит код на сервер при каждом пуше. Кайф?

📚 Где учить:

Report Page