【问题标题】:How do I execute dynamic code in a container?如何在容器中执行动态代码?
【发布时间】:2020-03-18 22:02:12
【问题描述】:

我正在从事一个涉及基于浏览器的代码编辑器的个人项目(想想https://repl.it)。我的计划:

1) 不断将正在写入的代码流式传输到 kubernetes 上的远程 docker 卷。

2) 当用户按下“运行”时执行此代码。

我已经开始研究流媒体基础架构,并且非常了解我想要如何做。但是,关于代码执行,我需要一些指导。

想法 A:我在想我可以有两个 docker 容器,一个 Web 服务器和一个“环境”,位于同一个 VM 上。当请求进入网络服务器时,它将在环境中运行docker exec ...

想法B:我使用kubectl,特别是kubectl exec来执行容器上的代码。

有几点需要注意。我想让“环境”容器可互换,即我的应用程序应该能够支持python、js等。有什么想法吗?

【问题讨论】:

    标签: docker kubernetes containers kubectl docker-exec


    【解决方案1】:
    1. 这是一个非常糟糕的主意,不要这样做
    2. 您可能希望在新容器中运行每个 sn-p 以实现最大程度的隔离。

    【讨论】:

    • 您介意澄清什么是“非常糟糕的想法”吗?我已经稍微改变了上面子弹的命名(从想法 1/2 到想法 A/B)。您是否建议我在每次用户执行更新后的代码时启动一个新容器?我担心创建/销毁容器的开销太大,因为任何给定的用户都将使用相同的环境进行所有开发。
    • 制造容器非常便宜,这就是它们的用途:) 至于这是一个坏主意,容器不是防弹的。这种隔离充其量是不完美的,而且要时刻关注所有新出现的安全问题是一项严肃的全职工作。可以从互联网上运行不受信任的代码,看看托管的 CI 工具,但这不能掉以轻心,否则你会立即被比特币矿工和垃圾邮件机器人淹没。
    • 明白了,感谢您的回复!对于这个用例,让我们假设我们的用户都是“非对抗性的”。此外,我们的容器可能非常重量级;因此每次发出“运行”时向上/向下旋转它们可能需要一些时间。话虽如此,如果我们有一个持久的环境容器,并且我们在它上面做了一个kubectl exec(使用用户正在编写的同步代码),这是一个合理的方法吗?考虑到上述假设,您会采取不同的做法吗?
    • 不,这种方法不合理。即使是“重量级”容器也需要几毫秒才能启动。唯一慢的部分是图片下载和大量缓存。
    • 知道了。假设我们为每个 sn-p 启动一个新的 docker 容器,你认为我们如何在 kubernetes 领域做到这一点?如果我们有一个作为 Kubernetes 部署(即在容器/pod 中)运行的 Web 服务器,它接受“运行”新代码的请求,您如何建议我们为这些代码动态创建容器?我们应该即时创建 Pod 吗?根据我的阅读,这很慢(大约几秒钟)。有什么想法吗?
    猜你喜欢
    • 2014-11-21
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多