繁体   English   中英

如何使docker为用户缩短命令行运行时间?

[英]how to make the docker run command-line shorter for the user?

我已经将(假设的)程序dhprog上传到Docker Hub,它的工作方式如下:

docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it dhuser/dhimage dhprog arg1 arg2

该程序的非dockerized版本的工作方式如下:

dhprog arg1 arg2

我有-v因为我想使当前目录在容器中作为/workdir可用(这样,如果arg1是容器外部的文件名,则dhprog中的dhprog可以读取该文件)。

我有-u因为我想以非root用户dhprog在容器中运行dhprog ,并且如果arg2是输出文件名,则应将其作为调用docker run命令的相同UID和GID写入容器外部。

如何在不影响2个功能(在容器外部读写文件)以及以非root身份在容器外部写入文件的情况下,让docker run为用户缩短docker run命令行,尤其是-v-u标志,但作为调用用户?

唯一真正的选择是分发一个shell脚本,为您打包所有脚本。 例如,制作一个名为dhprog的shell脚本,如下所示:

#!/bin/sh
exec docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" \
  --rm -it dhuser/dhimage dhprog "$@"

我会避免使用bash别名,因为在许多情况下这些别名将不可用,而$PATH的脚本的工作原理与任何其他二进制文件一样。

  1. 创建一个脚本,该脚本将命令“安装”为用户主目录内的本地脚本。

  2. 使用您拥有的域或通过诸如rawgit之类的服务将其公开的存储库中,将其作为纯文本页面在线发布。

  3. 现在,您可以使用以下复制和粘贴代码片段分发它:

    curl -s“ http://example.com/dhprog ” | 重击

如今,有许多这种方法的示例,例如,您可以看到以与上述相同的方式运行的sdkman安装脚本

  1. 现在,用户将在其外壳中使用dhprog

  2. 奖励:如果您擅长编写脚本,则甚至可以在每次创建新的Shell时(例如,像oh-my-zsh这样)强制用户shell检查程序(脚本)的更新。

Sparrow非常适合执行以下任务:

$ cat story.bash
 set -e
 path=$(config path)
 docker run -v "$path:/workdir" -u "$(id -u):$(id -g)" \
 --rm -it dhuser/dhimage dhprog \
 $(cli_args)

$ cat sparrow.json
 {
   "name" : "docker-dhprog",
   "version" : "0.0.1"
 } 
$ sparrow plg upload

在安装了麻雀的其他服务器上,只需:

$ sparrow plg install docker-dhprog
$ sparrow plg run docker-dhprog --param path=$PWD -- arg1 arg2 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM