Как развернуть 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: Собираем и запускаем контейнер
Открой терминал в папке проекта и пиши команды. Это проще, чем кажется!
- Собираем образ
docker build -t my-cool-app .
Тут my-cool-app — это имя твоего образа (назови как хочешь), а точка в конце говорит "строй из этой папки".
- Запускаем контейнер
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 и запустить его как настоящий разработчик. Это не только удобно, но и добавляет тебе очков крутости в глазах друзей или коллег. Попробуй, поиграйся с настройками