Lab

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

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

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

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

Мы упакуем их в 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"]

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

Шаг 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 — это имя твоего образа (назови как хочешь), а точка в конце говорит "строй из этой папки".

  1. Запускаем контейнер
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 — это два отдельных контейнера, каждый со своей задачей.

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


Итог

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