立即部署新版本的图像

时间:2016-01-11 19:01:12

标签: docker

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

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

然后我想把它映射到3个网址:

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

还有,第4个网址,指的是当前(或默认)版本:

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

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

我们的想法是,部署下一版本的应用程序是与激活该版本不同的一步(通过激活,我的意思是将该版本作为默认版本)。

因此,推出(或回滚)只需将默认版本更改为下一个(或上一个)版本。

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

有没有人使用Docker设置这样的东西?我很感激有关如何做的任何建议。感谢。

2 个答案:

答案 0 :(得分:3)

我会在运行您的webapp的容器前面使用反向代理执行此操作。

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

假设您的泊坞主机IP地址为11.22.33.44

让我们说你的码头图片是:

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

首先,确保您的DNS已设置好,以便v5.example.comv6.example.comv7.example.comwww.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

将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环境变量的值来更新其配置并将请求路由到正确的容器。

如何使v7成为新的默认值

首先,删除容器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的查询加载到webapp6webapp7个容器。

最后,删除容器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,我这样做:

  1. 更改nginx配置文件中的端口号(请参阅下面的文件)
  2. 调用服务nginx重新加载(即时)。
  3. server{
        location / {     
            proxy_pass http://192.168.1.50:81/;
        }
    }