Главная/Статьи/Как развернуть Python приложение в Docker
DockerPython

Как развернуть Python приложение в Docker

Сегодня я поделюсь с вами простым способом, как запустить своё Python-приложение в Docker-контейнере. Запуск Python в контейнере бывает полезно, когда мы хотим, чтобы наш код работал одинаково на любой машине, будь то твой ноутбук, сервер или комп у друга. Никаких «у меня не работает, потому что версия Python другая» — Docker решает эти проблемы на раз-два. Если ты только начинаешь разбираться в разработке, этот туториал для тебя! Всё будет пошагово, с примерами кода. Поехали!

Что нам понадобится?

Для примера представим, что у нас есть два файла:

  • main_app.py — основной файл нашего приложения (например, с роутами или логикой).
  • worker.py — какой-то фоновый скрипт (допустим, он что-то обрабатывает в фоне).

Мы упакуем их в Docker и запустим. Тебе понадобится только установить Docker на свою машину (поиск «Docker Desktop» в гугле тебе в помощь) и немного терпения. Готов? Тогда начнём!

Шаг 1: Создаём Dockerfile

Docker работает как поваренная книга: мы пишем инструкции, а он готовит нам контейнер. Создай файл с именем Dockerfile (без расширения!) в папке с твоим проектом. Вот что туда закинем:

# Берем легкую версию Python
FROM python:3.11-slim

# Устанавливаем рабочую папку внутри контейнера
WORKDIR /app

# Копируем список зависимостей и ставим их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем наши файлы в контейнер
COPY main_app.py .
COPY worker.py .

# Запускаем основной файл
CMD ["python", "main_app.py"]

Что тут происходит?

  • FROM python:3.11-slim — берём готовый образ Python (лёгкий, чтобы не тащить лишнего).
  • WORKDIR /app — создаём папку внутри контейнера, где будет жить наш код.
  • COPY requirements.txt . — копируем файл с зависимостями (о нём чуть ниже).
  • RUN pip install... — устанавливаем все библиотеки, которые нужны твоему коду.
  • COPY main_app.py . и COPY worker.py . — закидываем наши скрипты в контейнер.
  • CMD ["python", "main_app.py"] — говорим, что запускать при старте контейнера.

Шаг 2: Готовим requirements.txt

Этот файл — как список покупок для твоего приложения. Если ты используешь библиотеки вроде requests или flask, запиши их сюда. Например:

requests==2.28.1
flask==2.2.2

Если библиотек нет, просто создай пустой requirements.txt. Docker всё равно его ожидает, так что не пропускай этот шаг!

Теперь структура твоей папки должна быть такой:

твой_проект/
├── Dockerfile
├── requirements.txt
├── main_app.py
├── worker.py

Шаг 3: Собираем и запускаем контейнер

Открой терминал в папке проекта и пиши команды. Это проще, чем кажется!

1. Собираем образ

docker build -t my-cool-app .

Тут my-cool-app — это имя твоего образа (назови как хочешь), а точка в конце говорит «строй из этой папки».

2. Запускаем контейнер

docker run my-cool-app

Всё! Твой main_app.py должен заработать внутри контейнера.

Шаг 4: А что, если я хочу запустить и worker тоже?

Если тебе нужно, чтобы оба файла main_app.py и worker.py работали, можно пойти двумя путями. Первый — запустить их в одном контейнере, изменив последнюю строку в Dockerfile:

CMD ["sh", "-c", "python main_app.py & python worker.py"]

Тут & означает «запусти в фоне», и оба скрипта будут работать одновременно. Но честно, это не всегда удобно. Лучше использовать Docker Compose — это как «дирижёр» для нескольких контейнеров.

Шаг 5: Docker Compose — для тех, кто хочет уровень выше

Создай файл docker-compose.yml и вставь туда:

version: '3'
services:
  main-app:
    build: .
    command: python main_app.py

  worker:
    build: .
    command: python worker.py

Теперь одной командой запускаем всё:

docker-compose up --build

Тут main-app и worker — это два отдельных контейнера, каждый со своей задачей.

Полезные советы для новичков

  • Порты: Если твой main_app.py — это веб-сервер (например, Flask), добавь в Dockerfile строку EXPOSE 5000 (или другой порт) и запусти контейнер с -p 5000:5000. Пример: docker run -p 5000:5000 my-cool-app.
  • Ошибки: Если что-то не работает, смотри логи в терминале или добавь -it в команду запуска (docker run -it my-cool-app), чтобы видеть вывод.
  • Экспериментируй: Docker — это песочница, ломай и строй заново, ничего страшного!

Итог

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