Я хочу контейнировать скрипт Python, который читает / записывает файлы. Сценарий имеет очень специфические требования к среде, поэтому я хочу использовать Docker, чтобы сделать развертывание простым и повторяемым.
Это параметры командной строки скрипта:
% python myscript.py --help
usage: myscript.py [-h] inputfile outputfile
positional arguments:
inputfile input file to read from
outputfile output file to write to
optional arguments:
-h, --help show this help message and exit
Вот как выглядит мой Dockerfile:
FROM ubuntu:18.04
# Install requirements
RUN ...
# Install the script from source code
WORKDIR /src
RUN ...
# Define entrypoint to the container
WORKDIR /root
ENTRYPOINT ["python3.7", "/src/myscript/myscript.py"]
Вот как я хотел бы использовать мое контейнерное приложение:
docker build -t myscript .
docker run \
-v <some_very_clever_bind_mount> \
myscript <input_relative_to_host_dir> <output_relative_to_host_dir>
т.е. Я хотел бы иметь возможность указать входные и выходные файлы относительно того, где команда docker run
выполняется в операционной системе хоста. Другими словами, будьте полностью прозрачны с тем фактом, что мы имеем дело с контейнерным приложением, а не с скриптом, запускаемым на хост-ОС.
Может ли кто-нибудь придумать умный способ сделать то, что мне нужно, по возможности?
Или есть другой шаблон проектирования Docker, который достигает моей цели высокого уровня?
Любая помощь приветствуется!
PS. Вдохновением для меня послужили этапы компоновки в контейнере Google Cloud Build, но я не уверен, как Google добился привязки файловой системы среды сборки, чтобы сделать возможным их поведение.
PPS: Dockerized исполняемый файл для чтения / записи в файловой системе хоста - аналогичный вопрос, но я уже знаю, что это возможно путем привязки томов. Суть моей проблемы заключается в том, как сделать это так, чтобы контейнер докера был естественным для взаимодействия с точки зрения предоставления путей к файлам в операционной системе хоста.