如何在单个服务器上运行多个基于 docker 的 web 服务?

如何在单个服务器上运行多个基于 docker 的 web 服务?

由于资源限制,我需要在一台 VPS 上搭建多个基于 docker 的 web 服务,每个网站都需要使用 80 和 443 端口上网,但显然 80 和 443 只有一个,我需要用不同的域名来表示不同的网站。

我最初的想法是运行一个 Nginx 或 Apache2 服务,将每个网站的 80/443 端口映射到后端的实际 docker 端口。例如,a.example.org 的 443 请求转发到容器 A 的端口 1234,b.example.org 的 443 请求转发到容器 B 的端口 2345。

我的问题是:

(1)对于我的要求来说,Nginx 和 Apache2 哪个更简单?(例如,我知道 DigitalOcean 为 Nginx 提供了非常好的配置构建器服务,因此我可能更愿意部署 Nginx)

(2)对于容器A和容器B,以及将来的容器CDEF等,我是否可以给它们分别分配不同的xxxx:443端口映射,然后将这些不同的端口提供给Nginx/Apache2,以便它们能够根据其域名处理不同的访问请求?

答案1

我更喜欢 Nignx,因为它比 Apache 更简单。请使用proxy_pass它将传入请求代理到容器并按域将它们分开。

您可以将 nginx 部署为容器,这是 nginx 的一个简单配置:

server {
    listen 80;
    server_name domain-1.com;
    location / {
        # Name and Port of Container
        proxy_pass http://container_A:1234;
    }
}

server {
    listen 80;
    server_name domain-2.com;
    location / {
        # Name and Port of Container
        proxy_pass http://container_B:2345;
    }
}

server {
    listen 80;
    server_name sub.domain-2.com;
    location / {
        # Name and Port of Container
        proxy_pass http://container_C:3456;
    }
}

注意,nginx 必须可以访问其他容器的网络或者与它处于同一个 docker-network 中。

您还可以将 nginx 部署为 Linux 服务,但您可以更改container_Alocalhost或任何ip:port您监听每个容器的内容。

答案2

虚拟分钟

除了这里的其他好答案之外。免费且自由的源代码(开源)Virtualmin 允许您在同一台服务器上轻松运行无限数量的 Docker。

使用 Apache 或 Nginx。假设服务器具有适当数量的资源。

归因和详细信息请参阅 Virtualmin 员工 Joe 的这篇文章https://forum.virtualmin.com/t/docker-on-virtualmin/111137/3

相关内容