为Docker部署Rails应用程序
阅读许多资源,但从部署的angular度来看仍然困惑于Docker。 试图找出在Docker环境中Rails应用程序的最佳实践,特别感兴趣的是如何解决以下问题:
1)访问之前部署的容器中的日志,可以停止/销毁。 rsyslog现在/ syslog的?
2)回滚部署有多容易? 就请求丢失而言,这是否安全? 你可以向图像发送USR2 + QUIT信号,但是保持优雅地与另一个图像开始新的主/从工作? 带有多个图像端口的Nginx上游?
3)如何configurationAnsible或替代品的Dockerfile? 否则Dockerfile bash风格的缺陷是什么?
4)通过Docker访问Rails控制台的最佳方式是什么?
1)访问之前部署的容器中的日志,可以停止/销毁。 rsyslog现在/ syslog的?
一种select是将您的日志发送到ELK堆栈 。 使用logtash-forwarder或log-courier或Beaver
2)回滚部署有多容易? 就请求丢失而言,这是否安全? 你可以向图像发送USR2 + QUIT信号,但是保持优雅地与另一个图像开始新的主/从工作? 带有多个图像端口的Nginx上游?
这是一个很好的问题。 所以,如果你想正常地终止你的会话,你将不得不和独angular兽或任何其他的容器交谈,并在容器内部发出USR2 + QUIT信号来优雅地处理会话终止。
容器是非常轻量级的,所以,而不是重新启动你的nginx /独angular兽,你可以用新的代码实例化新的容器,并终止与旧代码的容器终止nginx /独angular兽的过程。 这里的技巧是pipe理容器和在容器内发出命令的机制。 不知道,但我认为Kubernetes可能有这个机制。
3)如何configurationAnsible或替代品的Dockerfile? 否则Dockerfile bash风格的缺陷是什么?
这更多地取决于你的想象力,你想怎么做。 你可以模板Dockerfiles,并有可靠的运行docker build
。 或者你可以使用Ansible Docker模块 。 Dockerfile本质上是一个build立容器的Runbook,可以修改,放入源代码控制等。
4)通过Docker访问Rails控制台的最佳方式是什么?
分配一个伪tty到你的容器并使其交互。 然后你可以运行:
docker attach <container-id>
附加到容器,然后运行你的bundle exec rails console
命令。
或者,您可以将容器的进程号1
作为sshd
进程,然后您可以ssh到容器并运行bundle exec rails console
。 这就是像docker-driver这样的testing厨房这样的工具。