Настройка приложения командной строки Dockerised в Windows - PullRequest
0 голосов
/ 24 ноября 2018

Я распространяю приложение командной строки для пользователей Windows, OSX и Linux.Целевая аудитория приложения - это разработчики, системные администраторы и технически продвинутые пользователи.

Я знаком с тем, как инструменты командной строки и Docker работают в Unix.Однако я не использую Microsoft Windows для разработки более 10 лет.

Я хочу сделать так, чтобы, когда люди набирают app из командной строки или PowerShell, точка входа в докер выполнялась так, как онабыли родным приложением командной строки.Однако я не знаю, каков наилучший способ настроить это для пользователей Windows: должен ли я каким-то образом создать фиктивный EXE-файл в PATH, я могу так или иначе назвать запуск Docker или сам Docker для Windows предоставляет некоторые инструменты для простого запуска образов без сложной настройкии процесс файла конфигурации.

Чтобы еще больше усложнить ситуацию, для app мне нужно создать несколько сопоставлений виртуальных томов, чтобы он мог читать и записывать файлы с главного диска, например, он может обрабатывать любые входные файлы.дано за это.Он также будет связываться с локальным хостом или с внешними HTTP-серверами, уже работающими в Windows.

Каковы рекомендации по плавному процессу установки для app, чтобы я спас пользователя от длинных команд командной строки илисложный процесс настройки и команды будут доступны в сеансе командной строки по умолчанию?

Могу ли я дать пользователям одну команду лайнера, которая бы установила для них app и образ Docker?

Ниже приведен предыдущий вопрос, как мне создать образ Docker:

Контейнерное приложение командной строки Python

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Должен ли я каким-либо образом создать фиктивный EXE-файл в PATH

  • Создать упаковщик командный файл (*.cmd) - который оба cmd.exe и PowerShell способны вызывать так же, как двоичные исполняемые файлы, и помещать его в один из каталогов, перечисленных в %PATH%.

    • Однако в Windows нет стандартизованного каталога (тогда как в Linux есть /usr/bin и macOS /usr/local/bin), поэтому вашей процедуре установки, возможно, придется создать ее и использовать setx.exe, чтобы постоянно добавлять ее в %PATH%.
  • СделатьПакетный файл оболочки выполняет настройку по требованию, а затем вызывает целевой образ Docker, передавая все аргументы (.*).

Могу ли я дать пользователям одну команду лайнера, котораянастроить приложение и образ Docker для них?

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


Пример пакетного файла оболочки app.cmd:

@echo off
setlocal

set appName="%~n0"

:: #  perform on-demand configuration...

:: # Invoke the application in the target container.
sudo docker run -it %appName%:0.1 %appName%.py %*
0 голосов
/ 24 ноября 2018

Если ваше приложение написано на почти универсальном языке сценариев (Python);Ваша пользовательская цель - разработчики и системные администраторы (у которых, вероятно, уже установлен Python);и ключевая часть вашего приложения взаимодействует с файлами хоста, отличными от Docker, и другими сервисами;тогда вы, вероятно, не ищете Docker-контейнер.Приложение должно быть непосредственно запущено на хосте.

Python уже имеет довольно надежную систему упаковки , и я бы положился на это в качестве основного механизма распространения.Технически квалифицированный пользователь не будет бояться

python -m venv $HOME/myapp
. $HOME/myapp/activate
pip install myapp

(Помните, что нативный Docker для Linux требует разрешения root, чтобы что-либо делать; и Docker для Mac / Windows может получить доступ только к некоторым файлам, как правило, «рядом» сдомашний каталог пользователя; обращение к хосту и управление правами доступа к файлам являются постоянными источниками хитрости для процессов, которые действительно работают с хостом, но по какой-либо причине запускаются в Docker.)

...