立即部署新版本的图像
我想在任何时候(在同一台机器上)运行我的容器的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.com
, v6.example.com
, v7.example.com
和www.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_HOST
variables:
docker rm webapp7 docker run -d -name webapp7 -e VIRTUAL_HOST="v7.example.com,www.example.com" mywebapp:7
在这种状态下,反向代理将负载平衡www.example.com
对webapp6
和webapp7
容器的查询。
最后,移除容器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只是为了切换版本,我这样做:
- 更改nginxconfiguration文件中的端口号(请参阅下面的文件)
- 调用服务nginx重载(即时)。
server{ location / { proxy_pass http://192.168.1.50:81/; } }