Java 如何在Docker容器和任何IDE中使用Spring Boot进行开发

Java 如何在Docker容器和任何IDE中使用Spring Boot进行开发,java,spring-boot,docker,maven,Java,Spring Boot,Docker,Maven,我使用docker compose启动不同的Spring Boot应用程序 我的docker图像是用这种Dockerfile定义的: FROM openjdk:8-jdk-alpine ADD app.jar app.jar ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] 但是,我希望使用类似于

我使用docker compose启动不同的Spring Boot应用程序

我的docker图像是用这种
Dockerfile
定义的:

FROM openjdk:8-jdk-alpine

ADD app.jar app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
但是,我希望使用类似于
mvn spring boot:run
的方法来调试和热重新加载特性,而不依赖于特定的IDE

在Docker容器中使用Spring Boot完成调试和热重新加载而不依赖于特定IDE的最佳方法是什么

注意事项:

  • 我的源文件被构建到一个jar(使用Maven)中,该jar被复制到包含我的Docker图像定义的不同位置;这意味着我的源文件不在docker映像中
  • 我希望在Docker容器中开发的原因是,我的应用程序相互依赖,并且在Docker compose环境中配置,因此我无法在Docker网络和环境之外单独运行一个应用程序

我想在docker容器中装入一个包含spring boot项目的卷,然后在容器中使用
mvn spring boot:run
;但我无法阻止maven从internet下载所有依赖项(我尝试指定一个包含项,但没有成功)。我想知道这是否是一个体面的解决方案,以及如何使其工作。

按照您的思路,您可以尝试将依赖项从卷复制到项目容器中,然后在以下情况下使用脱机模式:

FROM openjdk:8-jdk-alpine

WORKDIR /app

# copy the Project Object Model file
COPY ./pom.xml ./pom.xml

# copy your dependencies
COPY app.jar app.jar

# copy your other files
COPY ./src ./src

# Set fetch mode to offline to avoid downloading them from the internet
RUN mvn dependency:go-offline
显然,通过在~/.m2/settings.xml文件中设置offline属性,还可以全局配置脱机模式,您可以设置该属性,复制m2文件,并在运行容器时引用它

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <offline>true</offline>
</settings>
您可以在此处找到更多信息:


您必须按照以下步骤在docker中构建和运行spring boot应用程序

步骤1:在项目中创建名为Dockerfile的文件。

步骤2:在Dockerfile上编写以下代码

# Use the official maven/Java 8 image to create a build artifact.
# https://hub.docker.com/_/maven
FROM maven:3.6-jdk-11 as builder

# Copy local code to the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src

# Build a release artifact.
RUN mvn package -DskipTests

# Use AdoptOpenJDK for base image.
# It's important to use OpenJDK 8u191 or above that has container support enabled.
# https://hub.docker.com/r/adoptopenjdk/openjdk8
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
FROM adoptopenjdk/openjdk11:alpine-slim

# Copy the jar to the production image from the builder stage.
COPY --from=builder /app/target/your-app-name*.jar /your-app-name.jar

# Run the web service on container startup.
CMD ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/your-app-name.jar"]
步骤3:启动Docker桌面应用程序

步骤4:打开终端或Windows PowerShell。然后转到项目目录

步骤6:编写以下命令为应用程序创建映像(必须具有internet连接才能下载所有依赖项)

步骤7:图像创建成功后。编写以下代码以在Docker容器中运行映像

docker run -p docker-port:app-port image-name

docker build -f Dockerfile -t your-app-name .
docker run -p docker-port:app-port image-name