我的网站在Docker容器中运行,如何实现虚拟主机?

我在两个docker集装箱分别在vps中运行两个网站。 如www.myblog.com和www.mybusiness.com

我怎样才能在vps中实现虚拟主机,使两个网站都可以使用端口80。

我在其他地方问过这个问题,并build议看看: https : //github.com/hipache/hipache和https://www.tutum.co/他们看起来有点弯曲。 我试图find是否有一个简单的方法来实现这一目标。 谢谢!

另外,忘了提及我的vps是Ubuntu 14.04盒子。

看看jwilder / nginx-proxy项目。

使用docker-gen自动化的Docker容器的nginx代理

这是代理你的docker容器最简单的方法。 每次重启容器或启动一个新容器时,都不需要编辑代理configuration文件。 这一切都由docker-gen为你自动发生,它为nginx生成反向代理configuration,并在容器启动和停止时重新加载nginx。

用法

运行它:

$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock \ jwilder/nginx-proxy 

然后启动任何你想要使用env var VIRTUAL_HOST = subdomain.youdomain.com代理的容器

 $ docker run -e VIRTUAL_HOST=foo.bar.com ... 

如果您的DNS设置为将foo.bar.com转发到运行nginx-proxy的主机,则该请求将被路由到使用VIRTUAL_HOST env var set的容器​​。

多个端口

如果你的容器暴露了多个端口,nginx-proxy将默认为端口80上运行的服务。如果你需要指定一个不同的端口,你可以设置一个VIRTUAL_PORT env var来select一个不同的端口。 如果你的容器只公开一个端口,并且它有一个VIRTUAL_HOST env var set,那么这个端口将被选中。

你需要一个反向代理。 我们使用nginx和haproxy。 他们都工作得很好,很容易从docker集装箱运行。 运行整个设置的一个很好的方法是使用docker-compose(以前的fig)来创build两个没有外部可见端口的网站容器,并使用一个haproxy容器和两个网站容器的链接。 然后整个组合向networking公开一个端口(80),haproxy容器根据请求的主机名将stream量转发到一个或另一个容器。

 --- proxy: build: proxy ports: - "80:80" links: - blog - work blog: build: blog work: build: work 

然后haproxyconfiguration如,

 global log 127.0.0.1 local0 maxconn 2000 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults log global option dontlognull option redispatch retries 3 timeout connect 5000s timeout client 1200000s timeout server 1200000s ### HTTP frontend frontend http_proxy mode http bind *:80 option forwardfor except 127.0.0.0/8 option httplog option http-server-close acl blog_url hdr_beg(host) myblog use_backend blog if blog_url acl work_url hdr_beg(host) mybusiness use_backend work if work_url ### HTTP backends backend blog mode http server blog1 blog:80 check backend work mode http server work1 work:80 check