为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厨房这样的工具。