如何在Docker上管理Java和Python应用程序?

3pvhb19x  于 2023-01-29  发布在  Docker
关注(0)|答案(1)|浏览(159)

我有一个基于Django的Python应用程序,我在一个Docker容器上运行它,这个应用程序浏览文件系统,对一些XML文件进行分析,提取嵌入的源代码,并将其导出到单独的文件中。
应用应该运行一个Java jar文件,对Django web应用生成的文件进行静态代码分析。
我想把整个平台的两个部分隔离开来,Python Django部分在一个容器上,jar文件(它是一个开源工具)运行在另一个alpine容器上。
现在我想继续开发这个工具,并让Django应用通过生成的每个包含源代码的文件上的命令来运行这个工具。

  • 我应该在jar文件上创建另一个Django Package 器来暴露一些端点,以便第一个容器可以运行它吗?并且可能使 Package 器处理一个使用eval()来运行工具的GET请求吗?
  • 有没有其他方法可以增强这种架构?

编辑:我正在使用的工具:https://github.com/AbletonDevTools/groovylint

k5hmc34c

k5hmc34c1#

没有Docker的情况下,您现在设置工具的方式没有任何问题,我会继续做您正在做的事情,除非您试图用它来解决一些特定的问题。
当您将问题描述为“浏览文件系统”、“导出到文件”、“运行jar文件”时,这不是一个在Docker中工作良好的架构。(需要启动时选项,存在潜在的权限问题),一个容器不能直接在另一个容器中运行命令,并且一个容器不能启动另一个容器,除非被信任具有对整个系统的不受限制的根级别访问。
将其重新构建成一个可以很好地与Docker配合使用的表单需要进行一些重新设计,这对于您试图解决的实际问题来说是次要的。
1.不要让Java工具运行一次就退出,而要让它成为一个长时间运行的带有HTTP接口的进程。Django前端会HTTP POST一个它想要处理的文件,并在HTTP响应中返回结果。
1.部署一个类似RabbitMQ的作业队列。当Django应用程序有一个需要处理的文件时,它会将其发布到作业队列中。将Java工具 Package 在一个工作者中,该工作者从请求队列中读取,执行其处理,并写入响应队列。
最后一个选项是“最工业化的”--如果您需要一次处理数千个文件,根据工作负载增减Java工作者的数量,并且通常将其作为生产网络服务运行,这是一个很好的方法,但这听起来并不像是您的目标规模。
最后:你应该 * 永远不要 * eval()任何东西,你应该 * 尤其 * 永远不要eval()你从HTTP请求中得到的东西。这是一个巨大的安全灾难等待发生。(任何可以访问你的服务的人都可以读写你的服务可以读写的任何文件,甚至有可能改变服务运行的代码;这很容易变成有人接管您的整个系统的情况。)

相关问题