使用Docker的Clojure Web应用程序开发工作流程

5
我正在尝试使用Docker开发一个Clojure Web应用程序,但不确定该如何开始。从我迄今所读的内容以及查看官方Docker Clojure repo的链接来看,基本上有两种可能的方式:
  • 调用lein ring server(交互式地或作为Dockerfile中的CMD)
  • 使用Dockerfile将您的应用程序编译为uberjar,并在生成的jar文件上使用java -jar作为CMD。
前者在我看来有问题,因为开发环境与生产环境不尽可能接近,考虑到我们可能正在使用:dev leiningen配置文件添加一些严格不想要的东西到生产环境中(提供尽可能少的工具和"信息",即在公开的生产服务器上的代码总是一个好主意)。然而,后者似乎正好相反:现在每个更改基本上都需要重新构建镜像(编辑-编译-运行循环),因此你将失去lein ring在修改功能上的良好重新编译的功能。
人们在实践中如何使用这种组合?
PS: 我知道实际上可能还有其他操作模式(例如,将Immutant或Tomcat用作部署目标,或使用类似Hudson的CI服务器等)。我先问最基本的设置。
3个回答

1

您完全可以使用Leiningen在生产模式下运行。只需使用以下命令:

lein with-profile production ring server

我已经成功地使用过这两种方法,不过我们最终选择了 uberjar 方法,因为它启动速度更快。


1
我的团队和我决定在开发过程中优化快速反馈并尽量减少部署中的移动部分数量。因此,我们选择在开发中使用lein ring server,并选择在部署时使用uberjar。我已经在docker容器中运行代码并且没有使用它们。
我不想回到不能尽快看到更改代码结果的开发工作流程。在我看来,快速反馈远远超过了在本地机器和生产环境之间略有不同运行服务的风险。
此外,没有任何事情阻止我更改几行代码,然后启动一个运行得更接近我的生产设置的本地服务(无论是运行构建的docker镜像还是在本地构建uberjar)。

0

我使用第二个选项java -jar ...将我的Web应用程序部署到生产环境(尚未使用Docker)。这会创建像您所说的编辑-编译-运行周期。但我不会为每个更改重新编译。只有当我准备发布时才创建uberjar。当然,持续集成始终是推荐的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接