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

时间:2018-11-24 13:04:39

标签: windows powershell docker command-line alias

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

我很熟悉命令行工具和Docker在Unix上的工作方式。但是,我十年来一直没有使用Microsoft Windows进行开发。

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

进一步复杂化,对于app,我需要进行一些虚拟卷映射,以便它可以从主机驱动器读取和写入文件,例如。它可以处理为其提供的任何输入文件。它还将与Windows上已经运行的localhost或外部HTTP服务器通信。

如何为app进行顺利的安装过程的最佳实践是什么,以便使用户免于使用长命令行命令或复杂的配置过程,并且该命令将在其默认命令行会话中可用?

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

这是前面的问题,我如何创建Docker映像:

Containerising Python command line application

2 个答案:

答案 0 :(得分:1)

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

Python已经有了a fairly robust packaging system,我希望以此作为您的主要发行机制。技术熟练的用户将不会害怕

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

(请记住,Linux的本机Docker需要具有root权限才能执行任何操作;而Mac / Windows的Docker只能访问某些文件,通常“靠近”用户的主目录;联系主机和管理文件权限都是该文件的长期来源。对于真正要与主机一起工作但无论出于何种原因在Docker中运行的进程来说都是棘手的。)

答案 1 :(得分:1)

  

我应该以某种方式在PATH中创建一个虚拟EXE

  • 创建包装器 batch文件*.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 %*