Docker compose - 带有命令行工具的容器
Docker compose - container with command line instruments
抱歉,如果问题是一般性问题,我们将不胜感激有关更新公式的任何建议!
所以,我有 java 应用程序,它使用命令行工具进行计算。电话很少见。例如,有可能在 24 小时内没有呼叫它。问题是 Docker 将其容器化的方法是什么?
有几种可能的解决方案:
- 把所有东西都放在一个容器里
- 由 ssh 调用的单独的 tty 容器
- 在工具上开发 http 层
- 通过 systemd 公开 docker 以按需启动仪器容器
- 通过 tcp 公开 docker 以按需启动工具容器 (https://docs.docker.com/engine/api/v1.24/#1-brief-introduction)
问题是 - 我错过了什么吗?还有其他可能的解决方案吗?所有列出的解决方案都可行吗?有没有办法使用 Swarm 或 Kubernetes 等工具使其更干净?
根据我的经验,Docker 方式是您的第三种选择,将操作包装在 HTTP facade 中并始终保留它 运行。
HTTP 路径得到 Docker 的良好支持(例如,您可以使用其他容器的 --name
作为主机名)并且很容易在其他环境中进行测试或模拟。这也意味着,如果您确实需要更新其中一个支持工具,您只需重新启动另一个容器即可;您无需关闭主应用程序即可对其进行更新。
Docker 对于主要交互模式是命令行参数、stdin 或 stdout 的进程来说并不是特别好。特别是对于一个容器启动另一个容器该容器需要对主机进行不受限制的 root 访问,并且您需要使用 Docker API 而不仅仅是“启动一个子进程。
如果外部程序相当独立,那么将它们复制到 Docker 文件中并像普通子进程一样调用它们是可行的。你提到 Java;如果您将整个 JVM 添加到其他非 Java 映像中以用于您只是偶尔启动的内容,这会增加膨胀和复杂性。
抱歉,如果问题是一般性问题,我们将不胜感激有关更新公式的任何建议!
所以,我有 java 应用程序,它使用命令行工具进行计算。电话很少见。例如,有可能在 24 小时内没有呼叫它。问题是 Docker 将其容器化的方法是什么?
有几种可能的解决方案:
- 把所有东西都放在一个容器里
- 由 ssh 调用的单独的 tty 容器
- 在工具上开发 http 层
- 通过 systemd 公开 docker 以按需启动仪器容器
- 通过 tcp 公开 docker 以按需启动工具容器 (https://docs.docker.com/engine/api/v1.24/#1-brief-introduction)
问题是 - 我错过了什么吗?还有其他可能的解决方案吗?所有列出的解决方案都可行吗?有没有办法使用 Swarm 或 Kubernetes 等工具使其更干净?
根据我的经验,Docker 方式是您的第三种选择,将操作包装在 HTTP facade 中并始终保留它 运行。
HTTP 路径得到 Docker 的良好支持(例如,您可以使用其他容器的 --name
作为主机名)并且很容易在其他环境中进行测试或模拟。这也意味着,如果您确实需要更新其中一个支持工具,您只需重新启动另一个容器即可;您无需关闭主应用程序即可对其进行更新。
Docker 对于主要交互模式是命令行参数、stdin 或 stdout 的进程来说并不是特别好。特别是对于一个容器启动另一个容器该容器需要对主机进行不受限制的 root 访问,并且您需要使用 Docker API 而不仅仅是“启动一个子进程。
如果外部程序相当独立,那么将它们复制到 Docker 文件中并像普通子进程一样调用它们是可行的。你提到 Java;如果您将整个 JVM 添加到其他非 Java 映像中以用于您只是偶尔启动的内容,这会增加膨胀和复杂性。