在 Windows 上设置 Dockerised 命令行应用程序

Setting up Dockerised command line application on Windows

我正在向 Windows、OSX 和 Linux 用户分发命令行应用程序。应用程序的目标受众是开发人员、系统管理员和技术高级用户。

我熟悉命令行工具和 Docker 在 Unix 上的工作方式。但是,我已经 10 多年没有使用 Microsoft Windows 进行开发了。

我想这样做,以便当人们从命令提示符或 PowerShell 中键入 app 时,docker 入口点将被执行,就像它是本机命令行应用程序一样。但是我不知道为 Windows 用户设置它的最佳方法是什么:我应该以某种方式在 PATH 中创建一个虚拟 EXE,我可以以某种方式别名 Docker 启动或为 Docker 做Windows 本身提供了一些工具来轻松地 运行 图像而无需复杂的设置和配置文件过程。

更复杂的是,对于 app 我需要做一些虚拟卷映射,以便它可以从主机驱动器读取和写入文件,例如它可以处理为其提供的任何输入文件。它还将在 Windows.

上与本地主机或外部 HTTP 服务器进行通信 运行ning

如何为 app 进行顺利的安装过程的最佳实践是什么,这样我就可以让用户免于冗长的命令行命令或复杂的配置过程,并且命令可以在他们的默认命令行会话中使用?

我可以给用户一个 liner 命令来为他们设置 app 和 Docker 图像吗?

这是之前的问题,我如何创建 Docker 图像:

如果您的应用程序使用的是近乎通用的脚本语言 (Python);您的用户目标是开发人员和系统管理员(他们可能已经安装了 Python);您的应用程序的一个关键部分是与非 Docker 主机文件和其他服务进行交互;那么您可能不是在寻找 Docker 容器。该应用程序应直接 运行 在主机上可用。

Python 已经有 a fairly robust packaging system,我会依靠它作为您的主要分发机制。技术熟练的用户不会害怕

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

(记住原生的Docker for Linux需要root权限才能做任何事情;而Docker for Mac/Windows只能访问部分文件,一般来说"near" 用户的主目录;联系主机和管理文件权限对于真正与主机一起工作但出于某种原因 运行 in Docker.)

should I somehow create a dummy EXE in PATH

  • 创建包装器批处理文件 (*.cmd) - cmd.exe 和 PowerShell 都能够像二进制可执行文件一样调用- 并将其放在 %PATH%.

    中列出的目录之一
    • 但是 Windows 上没有标准化目录(而 Linux 有 /usr/bin 和 macOS /usr/local/bin),因此您的设置过程可能必须创建一个和使用 setx.exe 将其持久添加到 %PATH%.
  • 使包装器批处理文件按需执行设置,然后调用目标 Docker 图像,传递所有参数 (.*)。

Can I give the users one liner command that would set up the app and Docker image for them?

您可以设计一个冗长的 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 %*