Как запустить скрипт 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:
sudo docker build -t file-organizer .Это считывает наш Dockerfile и собирает установку Python и наш скрипт, чтобы они были готовы к запуску в одном образе контейнера:

Создайте тестовую папку с файлами
Чтобы увидеть наш скрипт в действии, мы создаем тестовую папку с именем “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 не предустановлена на большинстве систем. Вы можете легко установить ее с помощью менеджера пакетов, такого как apt на Ubuntu, brew на macOS и так далее.
Заключительные мысли
С вашим скриптом Python, работающим внутри Docker, вы готовы в полной мере воспользоваться чистой, портативной и последовательной средой разработки. Вы можете легко повторно использовать этот контейнеризованный рабочий процесс для других задач автоматизации, делиться своим скриптом, не беспокоясь о зависимостях, и поддерживать вашу систему в порядке. В качестве следующего шага рассмотрите возможность изучения того, как создавать многоскриптовые образы Docker, планировать контейнеры с помощью cron-заданий или интегрировать ваши скрипты с другими инструментами, такими как Git, Jenkins или даже облачные платформы, чтобы оптимизировать ваш процесс автоматизации и развертывания.