[英]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
的脚本的工作原理与任何其他二进制文件一样。
创建一个脚本,该脚本将命令“安装”为用户主目录内的本地脚本。
使用您拥有的域或通过诸如rawgit之类的服务将其公开的存储库中,将其作为纯文本页面在线发布。
现在,您可以使用以下复制和粘贴代码片段分发它:
curl -s“ http://example.com/dhprog ” | 重击
如今,有许多这种方法的示例,例如,您可以看到以与上述相同的方式运行的sdkman安装脚本 。
现在,用户将在其外壳中使用dhprog
。
奖励:如果您擅长编写脚本,则甚至可以在每次创建新的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.