使用docker compose进行编译

时间:2018-09-26 13:04:00

标签: maven docker compilation docker-compose

我想用docker容器部署一个Maven应用程序,如果可能的话,还要用docker进行测试,但是有一些问题。

由于使用Java,我需要在使用is之前先编译我的应用程序。

在编译过程中,还运行单元测试,该测试需要数据库连接。

为了进行测试,我使用了从本地启动的数据库容器,该容器在localhost:5432上运行。

如果我现在启动docker-compose,这将导致错误,因为容器不再可以访问localhost:5432。如果我在application.properties中编写postgres:5432,则由于未知主机postgres而无法编译。

如何处理。有没有一种方法可以从maven和postgres开始构建时间。

如您所见,我是docker-compose的新手,还没有工作流程。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您应该使用现有的面向桌面的构建过程来构建和测试应用程序,并且仅使用Docker来构建最终的部署工件。如果您要在源代码中对数据库位置进行硬编码,那么就存在您所描述的那种麻烦(如果您的云提供商托管了单独的暂存和生产数据库,您将怎么办?),您应该这样做可配置的。

docker build阶段,无法保证将存在任何特定的网络环境,外部服务或DNS名称,因此您无法执行诸如运行依赖于外部数据库的集成测试之类的事情。幸运的是,在Docker诞生之前的几十年中,软件工程界一直在解决这个问题。尽管许多Docker设置都非常热衷于将应用程序源代码直接安装到容器中,但对于编译语言而言,它的用处不大,而且实际上不适用于受控生产部署。

简而言之:以与使用Docker之前相同的方式运行Maven,然后将Dockerfile复制到经过完全测试的.jar文件中。