【问题标题】:Docker for local development with spring boot使用 Spring Boot 进行本地开发的 Docker
【发布时间】:2020-06-12 14:09:19
【问题描述】:

我想在我的开发环境中将 docker 与 Spring Boot 应用程序一起使用。

对于生产,我首先使用mvn package 生成war 文件,然后使用此dockerfile 构建映像:

FROM tomcat:9.0-jre8-alpine

COPY target/backend-0.0.1-SNAPSHOT.war $CATALINA_HOME/webapps/api.war

但出于开发目的,我希望能够在编辑代码时检查我的更改,而不必重做 mvn package 然后构建映像然后运行容器。可以使用 spring boot devtools 观察对代码所做的更改,以便每次更改源代码时都会重新编译我的应用程序。

但后来我想使用图像,仍然使用 tomcat,并设置一个卷。但我不知道我必须观看哪些文件。是文件夹目标还是其中的某些特定文件?我将卷链接到图像中的哪个文件夹?我猜是 $CATALINA_HOME/webapps 之类的东西。

如果有人可以帮助我指出正确的方向,将不胜感激?谢谢。

【问题讨论】:

  • 这里为什么要用Docker而不是你引用的原生Spring工具?
  • 因为我在生产环境中使用 docker,所以为了保持一致性,我想在 dev 中使用 docker
  • 使用本地构建的 Docker 映像运行集成测试很有意义。但是,如果您要部署到 Docker(或 AWS 或 Kubernetes)中,则没有要求您必须在相同的环境中进行所有开发。一个普通的本地 Java 构建环境将更容易用于日常工作。

标签: spring-boot docker tomcat docker-volume


【解决方案1】:

我设法使用Maven Docker image 做到了。使用卷映射源代码,并设置工作目录以便 Maven 可以找到 pom.xml。在你的 docker-compose.yml 中:

version: '3.1'
services:
  backend:
    image: maven:3.6.3-jdk-8
    command: mvn spring-boot:run
    ports:
      - 8080:8080
      - 8085:8085
    volumes:
      - .:/usr/src/mymaven:rw
    working_dir: /usr/src/mymaven

确保您在 pom.xml 中启用了启动工具

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <scope>runtime</scope>
  <optional>true</optional>
</dependency>

如果需要,请启用远程调试器:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>2.0.3.RELEASE</version>
  <configuration>
    <jvmArguments>
      -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8085
    </jvmArguments>
  </configuration>
</plugin>

然后您可以将代码编辑器附加到 Docker 容器: https://code.visualstudio.com/Docs/editor/debugging#_launch-versus-attach-configurations

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 2019-09-20
    • 1970-01-01
    • 2023-03-25
    • 2018-04-15
    • 1970-01-01
    • 2016-11-22
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多