🐳 Этап 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 сам бесплатно запустит тесты и отправит код на сервер при каждом пуше. Кайф?
📚 Где учить:
- docker curriculum — отличный практический туториал на английском от простого к сложному;
- официальная документация docker — раздел get started, где все разжевано с картинками.