【发布时间】:2017-12-14 18:22:00
【问题描述】:
我觉得我的情况是先有鸡还是先有蛋:
我的 Rails 应用是基于 Docker 的,我有几个用于 nginx、Rails、Resque worker、Redis 和 MySQL 的图像。
我当前的部署实现是(简单地说):
docker-compose build
docker-compose down
... compile assets
... migrate
docker-compose up
效果很好,但当然,如果我在部署期间浏览到应用程序,我没有任何响应,这不是很好的用户体验。
我知道在站点处于维护模式时在 nginx 中设置一个“维护”页面,但是 nginx 映像是 docker-compose 规范的一部分,因此也会下降。
在一个 docker-compose 规范中包含所有图像确实使部署更容易 - 如果 any 图像(包括 nginx)发生任何变化,它将自动部署。尤其是因为 nginx、Rails、MySQL 等都在同一个网络中。
如果 nginx 是 docker-compose 规范的一部分,我如何在重新部署应用程序时继续提供维护页面?
(如果有什么不同,我在主机上使用 gitlab 和 gitlab-runner 容器从 repo 进行部署。)
谢谢
【问题讨论】:
-
在您的示例中,
nginx服务是否因为包含 Rails 资产而被重新部署?如果您只是重建资产然后执行docker-compose up(没有down)是否仍会重新启动nginx服务? -
@AndyShinn - 实际上它不包含资产,它共享一个包含资产的卷。嗯好的,如果我不做
docker-compose down,那么 nginx 就不会重新启动(我的网关不好,但这是可以预料的,因为应用程序容器已关闭)。好的,所以我将尝试围绕部署启用维护页面,而不是关闭所有容器...... -
@SteveFolly,我已经更新了我的答案。我还提供了一个完整的例子here
标签: ruby-on-rails nginx docker docker-compose continuous-deployment