立即部署新版本的图像

我想在任何时候(在同一台机器上)运行我的容器的3个版本。 像这样的东西:

  • 版本v7(阶段)
  • 版本v6(现场)
  • 版本v5(旧)

那么我想把这个地图映射到3个url:

  • v7.example.com
  • v6.example.com
  • v5.example.com

此外,第四个url指的是当前(或默认)版本:

www.example.com(映射到http:// v6 .mydomain.com)

据推测,我可以采取一些configuration步骤,将“默认”版本从v6更改为v7。 这一步应该是即时和primefaces的。

这个想法是,部署应用程序的下一个版本是从激活该版本(通过激活,我的意思是使该版本的默认)不同的一步。

因此,部署(或回滚)仅仅是将缺省版本更改为下一个(或之前)版本的问题。

Google App Engine支持这种模式,我非常喜欢。

有没有人使用Docker设置这样的东西? 我将不胜感激关于如何做的build议。 谢谢。

我会在运行你的web应用程序的容器前面使用反向代理。

使用jwilder / nginx-proxy映像的示例

假设您的docker主机IP地址是11.22.33.44

假设您的docker图像是:

  • mywebapp:5 for v5
  • mywebapp:6 for v6
  • mywebapp:7 for v7

首先,确保您的DNS设置为v5.example.comv6.example.comv7.example.comwww.example.com全部parsing为11.22.33.44

docker主机上启动一个jwilder / nginx-proxy

 docker run -d --name reverseproxy -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro -e DEFAULT_HOST=www.example.com jwilder/nginx-proxy 

将v6设置为默认值

启动webapps容器:

 docker run -d -name webapp5 -e VIRTUAL_HOST="v5.example.com" mywebapp:5 docker run -d -name webapp6 -e VIRTUAL_HOST="v6.example.com,www.example.com" mywebapp:6 docker run -d -name webapp7 -e VIRTUAL_HOST="v7.example.com" mywebapp:7 

jwilder / nginx-proxy将使用VIRTUAL_HOST环境variables的值更新其configuration并将请求路由到正确的容器。

如何使v7成为新的默认版本

首先,移除容器webapp7并创build一个新的www.example.com添加到VIRTUAL_HOSTvariables:

 docker rm webapp7 docker run -d -name webapp7 -e VIRTUAL_HOST="v7.example.com,www.example.com" mywebapp:7 

在这种状态下,反向代理将负载平衡www.example.comwebapp6webapp7容器的查询。

最后,移除容器webapp6并最终重新创build它,但是在VIRTUAL_HOST值中没有www.example.com

 docker rm webapp6 docker run -d -name webapp6 -e VIRTUAL_HOST="v6.example.com" mywebapp:7 

我以为我会分享我最终做的事情。 我采取了Thomasleveil的build议来使用nginx。 但是,而不是开始和停止整个docker集装箱和nginx只是为了切换版本,我这样做:

  1. 更改nginxconfiguration文件中的端口号(请参阅下面的文件)
  2. 调用服务nginx重载(即时)。

 server{ location / { proxy_pass http://192.168.1.50:81/; } }