Docker 对于一次性 CLI 应用程序
Docker for a one shot CLI application
自从我第一次知道 Docker 以来,我认为它可能是我们在实验室中经常遇到的几个问题的解决方案。我在一个小型生物学研究小组担任数据分析师。我正在使用 Snakemake 为我们的分析定义通常很大且相当复杂的工作流程。
在 Snakemake 中,我通常会调用 R 中的小脚本,Python,甚至是对齐器或注释工具等命令行应用程序。在这种情况下,遭受依赖地狱的困扰并不少见,因此我考虑将一些工具包装在 Docker 容器中。
此刻我卡在了一个地步,不知道是我技术选错了,还是我没能很好地吸收Docker的所有信息。
问题与您必须以 root 用户身份 运行 Docker 工具有关,这是我根本不想做的事情,因为最初的想法是每个愿意使用它们的研究人员都可以使用的 dockerized 应用程序。
在AskUbuntu, the most voted answer proposes to add the final user to the docker group, but it seems that this is not good for security. In the security articles at Docker, on the other hand, they explain that running the tools as root is good for your security. I have found similar questions at SO,但与容器内部环境有关。
好的,我对此没有问题,但正如我碰巧发现的每个中等复杂度的示例,它似乎更面向 Web 应用程序开发,其中系统最初可以启动容器一次然后忘记关于它。
我现在正在考虑的事情:
- 将Docker守护进程配置为TLS-enabled,TCP远程服务,并为相应的用户提供证书。 运行应用程序会产生任何开销吗?安全问题?
- 通过共享 /usr/local/bin/ 卷或类似内容,创建仅向主机提供应用程序的映像。这安全吗? 如何创建不需要执行任何操作的守护进程容器? 我发现的唯一示例暗示创建 an infinite loop。
- nucleotid.es 页面似乎做了一些与我想要的类似的事情,但我没有找到任何关于安全问题的参考。也许他们运行把所有的容器都放在一个虚拟机里,他们不必担心这些问题,因为他们不需要将 dockerized 的应用程序暴露给更多的人。
抱歉我的冗长。我只是想写下我卡住的心理过程(可能有缺陷,我知道,我知道)。总结:
是否有可能创建不需要 运行 使用 sudo 的 dockerized 命令行应用程序,可用于同一服务器中的多个人,并且不适合以守护进程的方式 运行?
提前致谢。
此致。
如果用户将能够执行 docker run
那么将能够控制主机系统,因为他们可以将文件从主机映射到容器,并且在容器中,如果他们可以使用 [=10,他们总是可以是 root =] 或 docker exec
。所以用户应该不能直接执行docker。我认为这里最简单的解决方案是创建 运行 docker 的脚本,这些脚本可以具有 suid 标志,或者用户可以对它们进行 sudo 访问。
自从我第一次知道 Docker 以来,我认为它可能是我们在实验室中经常遇到的几个问题的解决方案。我在一个小型生物学研究小组担任数据分析师。我正在使用 Snakemake 为我们的分析定义通常很大且相当复杂的工作流程。
在 Snakemake 中,我通常会调用 R 中的小脚本,Python,甚至是对齐器或注释工具等命令行应用程序。在这种情况下,遭受依赖地狱的困扰并不少见,因此我考虑将一些工具包装在 Docker 容器中。
此刻我卡在了一个地步,不知道是我技术选错了,还是我没能很好地吸收Docker的所有信息。
问题与您必须以 root 用户身份 运行 Docker 工具有关,这是我根本不想做的事情,因为最初的想法是每个愿意使用它们的研究人员都可以使用的 dockerized 应用程序。
在AskUbuntu, the most voted answer proposes to add the final user to the docker group, but it seems that this is not good for security. In the security articles at Docker, on the other hand, they explain that running the tools as root is good for your security. I have found similar questions at SO,但与容器内部环境有关。
好的,我对此没有问题,但正如我碰巧发现的每个中等复杂度的示例,它似乎更面向 Web 应用程序开发,其中系统最初可以启动容器一次然后忘记关于它。
我现在正在考虑的事情:
- 将Docker守护进程配置为TLS-enabled,TCP远程服务,并为相应的用户提供证书。 运行应用程序会产生任何开销吗?安全问题?
- 通过共享 /usr/local/bin/ 卷或类似内容,创建仅向主机提供应用程序的映像。这安全吗? 如何创建不需要执行任何操作的守护进程容器? 我发现的唯一示例暗示创建 an infinite loop。
- nucleotid.es 页面似乎做了一些与我想要的类似的事情,但我没有找到任何关于安全问题的参考。也许他们运行把所有的容器都放在一个虚拟机里,他们不必担心这些问题,因为他们不需要将 dockerized 的应用程序暴露给更多的人。
抱歉我的冗长。我只是想写下我卡住的心理过程(可能有缺陷,我知道,我知道)。总结:
是否有可能创建不需要 运行 使用 sudo 的 dockerized 命令行应用程序,可用于同一服务器中的多个人,并且不适合以守护进程的方式 运行?
提前致谢。
此致。
如果用户将能够执行 docker run
那么将能够控制主机系统,因为他们可以将文件从主机映射到容器,并且在容器中,如果他们可以使用 [=10,他们总是可以是 root =] 或 docker exec
。所以用户应该不能直接执行docker。我认为这里最简单的解决方案是创建 运行 docker 的脚本,这些脚本可以具有 suid 标志,或者用户可以对它们进行 sudo 访问。