我是使用java的新手,刚刚开始掌握Maven和Gradle的构建过程和依赖管理系统。
据我所知,Docker是在docker主机内部署容器的绝佳工具。我认为这与Vagrant一样有用(虽然在功能上并不相同),因为它消除了不符合预期的环境问题。
我的理解是,在使用Maven或Gradle构建内容时,您可以创建一个JAR文件或包含其中二进制文件的WAR文件,以便它可以在JVM所在的任何地方运行。使用Docker,这似乎是多余的。我想Docker可以用于其他东西,比如从C ++或其他任何东西运行的程序? Docker是否因Java使用而多余?
答案 0 :(得分:6)
Docker是关于隔离和再现性的。
最后一点允许指定一个执行环境,具有您需要的确切品牌的JDK / JVM,以便您在开发机器(使用VM)或生产中运行。
多年来,即使您无法再下载最初部署该项目时使用的JDK的精确更新版本,您仍然可以重现该执行环境。
答案 1 :(得分:1)
我不是Docker用户(只是熟悉概念)但是根据我的理解,否,Dockers对于Java使用来说并不是多余的,即使用Maven或Gradle的地方。 Docker通过使用容器在包装(与maven等相比)方面做了一个更高的级别。
Jar / War及其所有依赖项本身就是一个可移植的实体,但它并没有处理主机环境配置。这个问题会稍微澄清一下,Using Docker in development for Java EE applications
显然,它对非字节代码语言更有用,但这并不意味着它对Java来说是多余的。
希望它有所帮助!!
答案 2 :(得分:1)
Java"便携性"主要是市场营销hogwash。
Java程序可以像其他任何东西一样进行系统调用(比如文件系统访问或分支子进程),所以除非你用安全管理器做一些奇特的东西,否则JVM不会隔离很多东西。
单个" JVM",而不是每隔几年发布一系列不兼容的JVM。还有竞争性的实现,有时候你是否使用Oracle的JVM或OpenJDK也很重要。
Docker也不仅仅是隔离和可重复性。例如,JVM没有类似UnionFS的内容。