Docker与Java IDE集成

3
我首先要说的是,我不是Java开发人员,也不是Docker专家。
为了缩小前端和后端(在这种情况下,Java)开发人员之间的差距,我开始使用一些带有Java和Maven的Docker镜像,并在构建完成后启动一个Docker容器,并将容器目录指向Java项目(前端开发人员不需要担心依赖项或如何运行后端服务)。
在这里,我已经有一个问题。我见过其他人构建包含实际代码的镜像,而不是稍后附加它,那么哪种情况最好(如果有的话)?我这样做是因为我可以重用该图像,“每个”项目都可以避免构建不同的镜像。
为了启动/停止/重启Docker容器,我创建了一个脚本,这样我就可以对代码进行一些更改,然后将其关闭并再次启动。
这种方法比较奏效,我的意思是,我很清楚这不是Java开发人员从控制台执行此类操作的正常工作流程。那么,最重要的问题是,您如何将Docker与Java IDE集成?
我知道您可以创建自定义的构建/运行命令,但我也读到过像日志之类的内容不会显示在IDE上。请问有人能解释一下你是如何使用Docker + Java IDE的吗?
注意:Maven也用于编译Java代码,例如 mvn clean install(如果这有帮助)。
1个回答

2

我不使用Java IDE和Docker。我用IDE(Eclipse)来编写和测试代码,用Maven来管理构建过程。然后我有一个像这样的Dockerfile

FROM java:8

RUN apt-get update || apt-get update
RUN apt-get install -y maven

# Maven installs Java 7, which set itself as the default...
RUN update-alternatives --remove java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

CMD java -jar target/main.jar

# Pull down dependencies here to allow Docker to cache more
ADD pom.xml /opt/app/pom.xml
WORKDIR /opt/app
RUN mvn dependency:go-offline -X

# I use the maven-shade-plugin to build a single jar
ADD src /opt/app/src
RUN mvn package

如果您在一台机器上构建所有的镜像,那么Docker会智能地缓存,您无需做任何其他操作。如果您想要在更多的机器上运行,或者您只是想让它更明确,您可以这样做:
“base/Dockerfile”:
FROM java:8

RUN apt-get update || apt-get update
RUN apt-get install -y maven
RUN update-alternatives --remove java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

CMD java -jar target/main.jar

$ docker build -t yourorg/java-base:8 ./base/

myapp/Dockerfile:

以上命令是使用Docker构建一个名为"yourorg/java-base:8"的镜像,其基础镜像为"./base/"目录下的文件。下面是具体步骤:

FROM yourorg/java-base:8

ADD pom.xml /opt/app/pom.xml
WORKDIR /opt/app
RUN mvn dependency:go-offline -X

ADD src /opt/app/src
RUN mvn package

使用Docker对Java的影响不会太大,因为JAR文件已经非常便携和自包含。我想这使得在同一台机器上轻松运行不同版本的Java变得容易。我使用它是因为它允许我在不需要知道容器内部内容的情况下运行不同语言的应用程序。我有一些用Java编写的应用程序,有些用Python、JavaScript和Erlang编写,但是它们都可以通过 docker run -d <flags> myorg/myimage:someversion 启动。


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