Как запустить скрипт Python с помощью Docker

Запуск скрипта Python Docker

Запуск скриптов Python — одна из самых распространенных задач в автоматизации. Однако управление зависимостями на разных системах может быть сложным. Здесь на помощь приходит Docker. Docker позволяет упаковать ваш скрипт Python вместе со всеми его необходимыми зависимостями в контейнер, обеспечивая его одинаковую работу на любой машине. В этом пошаговом руководстве мы пройдем через процесс создания реального скрипта Python и его запуска внутри контейнера Docker.

Почему стоит использовать Docker для скриптов Python

Когда вы работаете со скриптами Python, дела могут быстро стать запутанными/сложными. Разные проекты требуют разных библиотек, и то, что работает на вашей машине, может не сработать на чьей-то другой. Docker решает эту проблему, упаковывая ваш скрипт и его окружение вместе. Вместо того чтобы говорить “Это работает на моей машине”, вы можете быть уверены, что оно работает одинаково везде.

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

Если вы развертываете или передаете свой скрипт кому-то другому, Docker делает это тоже легко. Никаких инструкций по настройке, никаких “установите это и то”. Просто одна команда, и он работает.

Напишите скрипт Python

Давайте создадим каталог проекта, чтобы хранить ваш скрипт Python и Dockerfile. После создания перейдите в этот каталог с помощью команды cd:

mkdir docker_file_organizer  
cd docker_file_organizer

Создайте скрипт с именем “organize_files.py”, чтобы просканировать каталог и сгруппировать файлы в папки в зависимости от их расширений:

nano organize_files.py

Вставьте следующий код в файл “organize_file.py”. Здесь мы используем два предустановленных модуля Python, названных os и shutil, для работы с файлами и динамического создания каталогов:

import os  
import shutil  
  
SOURCE_DIR = "/files"  
  
def organize_by_extension(directory):  
    try:  
        for fname in os.listdir(directory):  
            path = os.path.join(directory, fname)  
            if os.path.isfile(path):  
                ext = fname.split('.')[-1].lower() if '.' in fname else 'no_extension'  
                dest_dir = os.path.join(directory, ext)  
                os.makedirs(dest_dir, exist_ok=True)  
                shutil.move(path, os.path.join(dest_dir, fname))  
                print(f"Перемещено: {fname} → {ext}/")  
    except Exception as e:  
        print(f"Ошибка при организации файлов: {e}")  
  
if __name__ == "__main__":  
    organize_by_extension(SOURCE_DIR)

В этом скрипте мы организуем файлы в заданном каталоге в зависимости от их расширений. Мы используем модуль os для перечисления файлов, проверки, является ли каждый элемент файлом, извлечения его расширения и создания папок с именами этих расширений (если они еще не существуют). Затем мы используем модуль shutil, чтобы переместить каждый файл в соответствующую папку. Для каждого перемещения мы выводим сообщение, показывающее новое местоположение файла.

Создайте Dockerfile

Теперь создайте Dockerfile, чтобы определить окружение, в котором будет работать ваш скрипт:

FROM python:latest  
LABEL maintainer="[email protected]"  
WORKDIR /usr/src/app  
COPY organize_files.py .  
CMD ["python", "./organize_files.py"]

Мы используем этот Dockerfile для создания контейнера с Python, добавляем наш скрипт в него и гарантируем, что скрипт запускается автоматически при старте контейнера:

Создание Docker файла

Соберите образ Docker

Перед тем как вы сможете собрать образ Docker, вам сначала нужно установить Docker. После этого выполните следующую команду, чтобы упаковать все в образ Docker:

sudo docker build -t file-organizer .

Это считывает наш Dockerfile и собирает установку Python и наш скрипт, чтобы они были готовы к запуску в одном образе контейнера:

Сборка образа Docker

Создайте тестовую папку с файлами

Чтобы увидеть наш скрипт в действии, мы создаем тестовую папку с именем “sample_files” с несколькими файлами разных типов. Мы создали эти файлы просто для того, чтобы сделать папку немного беспорядочной и посмотреть, как наш скрипт Python с этим справится:

mkdir ~/sample_files  
touch ~/sample_files/test.txt  
touch ~/sample_files/image.jpg  
touch ~/sample_files/data.csv

Запустите скрипт внутри Docker

Наконец, мы запускаем наш контейнер Docker и монтируем тестовую папку в него. Флаг -v монтирует вашу локальную директорию “~/sample_files” в директорию “/files” в контейнере, что позволяет скрипту Python читать и организовывать файлы на вашей хост-машине:

docker run --rm -v ~/sample_files:/files file-organizer

Здесь мы используем опцию --rm, чтобы автоматически удалить контейнер после завершения его работы, что экономит место на диске:

В конце мы используем команду tree, чтобы проверить, были ли файлы отсортированы в папки в зависимости от их расширений:

tree sample_files

Проверка результата с помощью команды Tree

Примечание: Команда tree не предустановлена на большинстве систем. Вы можете легко установить ее с помощью менеджера пакетов, такого как apt на Ubuntu, brew на macOS и так далее.

Заключительные мысли

С вашим скриптом Python, работающим внутри Docker, вы готовы в полной мере воспользоваться чистой, портативной и последовательной средой разработки. Вы можете легко повторно использовать этот контейнеризованный рабочий процесс для других задач автоматизации, делиться своим скриптом, не беспокоясь о зависимостях, и поддерживать вашу систему в порядке. В качестве следующего шага рассмотрите возможность изучения того, как создавать многоскриптовые образы Docker, планировать контейнеры с помощью cron-заданий или интегрировать ваши скрипты с другими инструментами, такими как Git, Jenkins или даже облачные платформы, чтобы оптимизировать ваш процесс автоматизации и развертывания.