我有一个经典的Java webapp应用程序。它由数据库(PostgreSQL)、servlet容器( Tomcat )和我的代码(作为*.war文件部署在Tomcat上)组成。
我想使用Docker打包/部署它(目前主要用于测试),但我不确定什么是“映射”它的最佳方式。
我最初的想法是让一个盒子里的应用程序定义一个容器,里面有Java、Postgres和Tomcat,只公开了http端口。
对Docker文档的进一步阅读显示,虽然可能(安装和运行supervisord作为一个前台进程,但它同时启动Postgres和Tomcat)可能不是预期的用途。按照教程的精神,我可能应该为Postgres创建一个容器,为Tomcat创建另一个容器,并创建一个数据容器来保存应用程序代码(我的*.war)和数据库文件。这意味着3+容器( db文件和*.war应该共享相同的数据容器吗?)
这里常见的做法是什么?
由于我以前没有码头经验,我可以期望从每一种方法的陷阱?
还有别的方法吗我错过了?
发布于 2014-08-06 20:25:55
我所看到的建议是拥有一个完整的容器:码头工人的误解:
误解:你应该每个码头集装箱只有一个过程!重要的是要理解,如果您将Docker视为基于角色的虚拟机而不是可部署的单一用途进程,那么管理Docker就简单得多。例如,您将构建一个“app”容器,它非常类似于您将创建的与init、cron、ssh等进程一起创建的“app”VM。不要试图用一个单独的容器来捕获它自己的容器中的每个进程,这些容器用于ssh、cron、app、web服务器等。
思考这个问题的一种方法是问问自己,你是否需要在没有其他人的情况下运行一片。好吧,也许您希望DB在没有应用服务器的情况下运行,但是多久运行一次呢?
发布于 2014-11-15 13:18:32
无论是否Docker,我认为不要同时将webapp和db服务器放在同一个容器中。最初,它可能会工作,但如果/随着应用程序的增长,您将希望扩展前端和数据库。从一开始就有不同的容器会使他们更容易移动,复制他们,等等。
https://softwareengineering.stackexchange.com/questions/251445
复制相似问题