我正在学习如何在基于java / spring的应用程序中使用Docker。
经过快速研究和阅读一些教程后,我对在日常开发中使用Docker表示怀疑。我不是在谈论CI或生产环境,只是在本地。
通常我会跑步,例如嵌入式Tomcat使用mvn(运行目标)。使用docker方法我需要打包应用程序,重建容器然后重新启动它(DockerCon16的David Gageot证实了这一点)。乍一看它需要更多时间。每次进行更改时,都应构建新图像。
使用Docker localy的优势在哪里?当然,我知道应用程序“在与生产相同的环境中”运行。
答案 0 :(得分:8)
你提出了一个非常有效的观点,在你的情景中确实存在时间损失。当“它在我的机器上工作”时,它会带来很大的优势。它可以在登台,QA测试和生产环境中很好地工作,而不管操作系统如何。
我在本地使用docker进行java spring开发,但主要是为了快速一致地启动构建/项目所依赖的数据库和消息传递系统。例如,我有一个依赖于MongoDB,MySQL,ElasticSearch和RabbitMQ的应用程序。我有每个这样的docker镜像和一个docker compose文件,使用一个docker-compose up命令将它们全部用完。这意味着我不必在我的笔记本电脑上手动安装它们,当你转移到另一个具有不同依赖数据库,中间件等的项目时,它是一个更好的解决方案。在我从项目转移到项目之前,我不得不手动停止和启动这些数据库,因为它们占用了大量内存。
如果您的构建中有一个验收测试套件(再次依赖于数据库等外部设备),Docker在本地环境中也具有优势 - 同样,它的主要优点还在于一致性,即如果它在本地运行则应该运行作为Jenkins构建的一部分。
我的建议是,码头工具有defo优势,例如:我们的构建现在更加可靠和可配置,但只在有意义的地方使用它 - Docker不是银弹。例如。您可能认为在Eclipse中运行Tomcat更好,因为调试更容易(不需要远程调试会话)。