我想在任何时候(在同一台机器上)运行3个版本的容器。像这样:
然后我想把它映射到3个网址:
还有,第4个网址,指的是当前(或默认)版本:
www.example.com(映射到http:// v6 .mydomain.com)
据推测,我可以采取一些配置步骤,将“默认”版本从v6更改为v7。希望这一步应该是即时和原子的。
我们的想法是,部署下一版本的应用程序是与激活该版本不同的一步(通过激活,我的意思是将该版本作为默认版本)。
因此,推出(或回滚)只需将默认版本更改为下一个(或上一个)版本。
Google App Engine支持这种模式,我非常喜欢它。
有没有人使用Docker设置这样的东西?我很感激有关如何做的任何建议。感谢。
答案 0 :(得分:3)
我会在运行您的webapp的容器前面使用反向代理执行此操作。
假设您的泊坞主机IP地址为11.22.33.44
。
让我们说你的码头图片是:
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
全部解析为11.22.33.44
。
在您的泊坞主机上启动 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
启动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
环境变量的值来更新其配置并将请求路由到正确的容器。
首先,删除容器webapp7
并创建一个新www.example.com
添加到VIRTUAL_HOST
变量的容器:
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
并最终重新创建它,但www.example.com
值中没有VIRTUAL_HOST
:
docker rm webapp6
docker run -d -name webapp6 -e VIRTUAL_HOST="v6.example.com" mywebapp:7
答案 1 :(得分:0)
我以为我会分享我最后做的事情。我采用了Thomasleveil的建议来使用nginx。但是,为了切换版本而不是启动和停止整个docker容器和nginx,我这样做:
的
server{
location / {
proxy_pass http://192.168.1.50:81/;
}
}