Контейнеризация Python приложений с Docker

Опубликовано 2024.07.15

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

Запуск Python в контейнере Docker

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

Пример Dockerfile для Python:

  1. # Базовый слой — официальный образ Python версии 3.11
  2. FROM python:3.11-slim
  3.  
  4. # Установка рабочего каталога
  5. WORKDIR /app
  6.  
  7. # Копирование файлов вашего проекта в контейнер
  8. COPY . .
  9.  
  10. # Установка зависимостей
  11. RUN pip install --no-cache-dir -r requirements.txt
  12.  
  13. # Определение команды для запуска проекта
  14. CMD ["python", "main.py"]

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

Пример docker-compose.yml:

  1. version: '3.8'
  2.  
  3. services:
  4. web:
  5. build: .
  6. ports:
  7. - "4000:4000"
  8. volumes:
  9. - .:/app
  10. command: python main.py

При запуске такого контейнера произойдёт запуск файла main.py на порту 4000.
Создание приложения на Flask
Давайте создадим тестовое приложение на Flask, работающее на порту 4000:
Файл с зависимостями будет очень простой:

Пример requirements.txt

  1. Flask==2.3.3

Пример main.py

  1. from flask import Flask
  2.  
  3. app = Flask(__name__)
  4.  
  5. @app.route('/')
  6. def home():
  7. return "Hello, Docker!"
  8.  
  9. if __name__ == '__main__':
  10. app.run(host='0.0.0.0', port=4000)

Инструкция по запуску

Docker и Docker Compose должны быть предварительно установлены.
Создайте перечисленные выше файлы в одной папке.
Откройте терминал и переместитесь в вашу папку.
Введите команду `docker-compose up`(если не работает - попробуйте `docker compose up`).
После запуска, ваше приложение на Flask будет доступно по адресу http://localhost:4000.

Docker может значительно упростить процесс запуска приложений на Python, обеспечивая согласованность и предсказуемость окружения — что особенно актуально в современном мире программной разработки.