【问题标题】:Docker-Compose for local Spring Boot Development用于本地 Spring Boot 开发的 Docker-Compose
【发布时间】:2020-05-03 03:32:46
【问题描述】:

我有以下 docker-compose 文件设置以及关联的 Dockerfile。

docker-compose.yml

version: '3'
services:
   vault:   
   springboot-app:
    build:
      dockerfile: ./Dockerfile
    restart: always
    ports:
      - "8080:8080"
    environment:
       - "SPRING_PROFILES_ACTIVE=local"

Dockerfile

FROM maven:3.5.2-jdk-8-alpine AS MAVEN_BUILD

COPY pom.xml /build/
COPY src /build/src/

WORKDIR /build/

RUN mvn -B -U -e clean verify 

FROM openjdk:8-jre-alpine

WORKDIR /

COPY --from=MAVEN_BUILD /build/target/MyApp-0.0.1-SNAPSHOT.jar /

ENTRYPOINT ["java", "-jar", "MyApp-0.0.1-SNAPSHOT.jar"]

当我运行 docker-compose up 时,我的应用程序现在运行良好。 我想知道我需要进行哪些更改才能在代码更改时重建 Spring Boot 应用程序?在我的 pom 文件中,我的 spring-boot-maven-plugin 设置如下,并且我指定了 spring-boot-devtools 依赖项

       <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>

非常感谢您对此的任何帮助

谢谢 达米安

【问题讨论】:

  • 你使用 git 吗? GitHub/gitlab ?然后使用 CI/CD
  • 您想在您的代码库中更改代码时重建图像吗?
  • 我想使用 docker-compose 在本地运行我的 spring boot 应用程序,不关心重新创建图像,只想使用 docker compose 启动所有依赖项,并且还能够看到我的应用程序中的实时更改
  • 我建议在 Docker 中运行所有您的应用程序,确保所有依赖项都已发布 ports:,并设置指向所有 @ 的 Spring 配置文件987654325@ 依赖的地址。然后从您的 IDE 的角度来看,您正在运行完全正常的本地代码,但您仍然可以从 Docker 中获得一些好处,例如特定于应用程序的数据库引擎。
  • 我认为一个问题,如果我理解正确的话,就是你将整个数据源复制到容器中,所以除非你在容器内开发(最后,它也会有问题因为您会丢失在容器内所做的更改)容器不知道对源代码的任何更改。您可以改为使用volume,这样,对本地源代码的更改也会被容器“视为”。

标签: java spring spring-boot docker docker-compose


【解决方案1】:

对于生产应用程序,您可以使用 Java Docker 映像以及已编译的 .jar 文件。

对于本地开发,请改用Maven Docker image。每当您对应用程序进行更改时,它都可以运行源代码并进行编译。您可以使用 docker-compose.yml 文件,例如:

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

请务必设置卷以将您的源代码映射到 Docker 容器,并设置工作目录以便 Maven 找到您的 pom.xml。

【讨论】:

    【解决方案2】:

    可能不是答案,但是

    你有任何特定的用例在 DockerFile 中使用 2 个 docker 镜像吗? 如果,您可以从 dockerfile 和 build(invoke build) 从脚本中移出构建步骤,并调用 docker-compose 将构建复制到 docker 容器并启动容器。 您可能会在 COPY 时遇到问题,docker 使用 docker 文件夹而不是您的项目文件夹。

    【讨论】:

    • 这是我在一些网站上找到的限制整体图像大小的最佳做法
    • 我从未尝试过,我认为这将是 2 个不同的 docker 图像,并且两者都有不同的上下文。
    猜你喜欢
    • 2021-07-09
    • 2020-06-12
    • 1970-01-01
    • 2019-09-20
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多