是否建议每个请求启动一个 docker 实例?
我在我的网络服务器上运行 lighttpd 或 Nginx 作为反向代理。我支持许多使用率非常低的子域。当子域的请求到达时,我想启动 docker 实例。最好我想动态启动它们,这样如果有多个用户到达,我会为每个用户启动一个......和/或共享实例(由配置确定)
最初我说这应该适用于低流量网站,但进一步考虑,不,这是一个坏主意。
每次启动 Docker 容器时,它都会向映像添加一个读写层。即使写入的数据很少,层也存在,每次请求都会产生一个。当单个用户访问一个网站时,渲染页面将生成 10 到 1000 的请求,用于 CSS、javascript、每个图像、字体、AJAX,每个都将创建这些读写层。
现在没有自动清理读写层——即使在 Docker 容器退出后它们仍然存在。默认情况下,不会丢失任何内容。
因此,即使对于单个低流量站点,您也会发现您的磁盘使用量随着时间的推移而稳步增长。您可以添加自己的自动清理。
然后是第二个问题:上传到网站的任何内容都不能用于任何其他请求,除非它被写入一些容器外共享存储。使用 S3 或单独的持久数据库服务很容易做到这一点,但它确实开始显示“每个请求一个新的 Docker 容器”方法的弱点。如果您要拥有一些持久化服务,为什么不让 Docker 容器更持久化并运行更长时间呢?