是否可以使用 Docker 为用户分离网站?

Cyr*_* N. 13 hosting docker

我管理服务器,用户在其中拥有自己的网站,可以通过 FTP(如托管公司)访问,而不是致力于隔离 LAMP 堆栈进程,我想知道是否可以实现 Docker 并使用每个网站的图像。

据我了解,您可以通过其端口公开 Docker 实例,因此如果您在同一台服务器上运行两个 Docker 实例,则必须公开两个不同的端口。

但是是否可以不导出端口,而是导出服务器名称,例如:

  • www.somewebsite.com : Docker 实例 1
  • www.otherwebsite.com : Docker 实例 2
  • www.etc.com : Docker 实例...

而且,在同一台服务器中。

我想在服务器上只安装 Apache,这会根据服务器名称将请求重定向到专用的 Docker 实例,但随后我必须在任何 Docker 实例上安装 Apache(再次!)和 MySQL。

这是可能的,而且,这在性能方面是否有趣(或根本没有)?

感谢您的帮助。

Jih*_*hun 13

对的,这是可能的。你需要做的是提供几个80端口。每个 URL 一个。您可以使用例如在 Docker 主机服务器上运行的 Apache 虚拟主机来执行此操作。

  1. 设置 DNS CNAME。
  2. 运行 docker 实例并将其 80 端口映射到 docker 主机的端口,例如 12345~12347。
  3. 在 docker 主机上运行 Apache 服务器并为每个 URL 设置一个虚拟主机,并将 ProxyPass 和 ProxyPassReverse 设置为 localhost:12345,这是您的 docker 实例之一。

Apache 配置文件将如下所示:

<VirtualHost *:80>
ServerName www.somewebsite.com
  <Proxy *>
    Allow from localhost
  </Proxy>
  ProxyPass        / http://local.hostname.ofDockerHost:12345/
  ProxyPassReverse / http://local.hostname.ofDockerHost:12345/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这有很大帮助。此外,还有`ProxyPreserveHost On`,因此您最终不会在您的网站内获得大量指向 http://local.hostname.ofDockerHost:12345/ 的链接。以下是对我有帮助的更多信息:https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension (4认同)