我如何使用 Dockerfile 将 Maven 依赖项存储在 docker 图像中
how do i store maven dependencies inside docker image using a Dockerfile
所以我制作了一个 spring 引导应用程序,我应该从 docker 容器中放入 运行,我想使用 docker 文件。
我正在使用这个 docker 文件:
FROM openjdk:8-jdk-alpine
ADD . /analytics-service
WORKDIR /analytics-service
ENTRYPOINT ./mvnw spring-boot:run
当我创建图像时,它只是复制文件,只有在我 运行 它之后,它才会开始下载所有 Maven 依赖项。
这需要一段时间,因为我会 运行 宁一些容器。
那我该怎么做呢?我希望它在创建图像时获得所有依赖项,所以当我创建一个容器时它不会开始下载。
如果我没理解错的话,您想先下载 Maven 依赖项,然后将它们与您的应用程序组合成一个映像吗?
如果这是您想要的,那么正确的方法如下:
- 拉一个maven镜像(通常你称这个阶段为'builder' - 这只是一个名字)
- 将您的 pom.xml 文件复制到工作目录中
- 运行 一次 maven 获取你的依赖然后再次打包它
- 从 openjdk 创建一个新的镜像库
- 将第 3 步的结果复制到您的应用图片中
- 公开一个端口
- 提供入口点
Docker文件中的内容如下:
FROM maven AS builder
WORKDIR /usr/src/analytics
COPY pom.xml .
RUN mvn -B dependency:go-offline
COPY . .
RUN mvn package
FROM openjdk:8-jdk-alpine
WORKDIR /analytics-service
COPY --from=builder /usr/src/analytics/target/YOUR_JAR_FILENAME.jar .
EXPOSE 80
ENTRYPOINT ["java", "-jar", "/analytics-service/YOUR_JAR_FILENAME.jar"]
在您 运行 之前,您需要知道您的 jar 文件是如何命名的。您可以 运行 在计算机上 Docker 之外的 mvn package 并查看生成的文件名。将其复制到 Docker 文件中上面的两个位置。
所以我制作了一个 spring 引导应用程序,我应该从 docker 容器中放入 运行,我想使用 docker 文件。
我正在使用这个 docker 文件:
FROM openjdk:8-jdk-alpine
ADD . /analytics-service
WORKDIR /analytics-service
ENTRYPOINT ./mvnw spring-boot:run
当我创建图像时,它只是复制文件,只有在我 运行 它之后,它才会开始下载所有 Maven 依赖项。 这需要一段时间,因为我会 运行 宁一些容器。 那我该怎么做呢?我希望它在创建图像时获得所有依赖项,所以当我创建一个容器时它不会开始下载。
如果我没理解错的话,您想先下载 Maven 依赖项,然后将它们与您的应用程序组合成一个映像吗?
如果这是您想要的,那么正确的方法如下:
- 拉一个maven镜像(通常你称这个阶段为'builder' - 这只是一个名字)
- 将您的 pom.xml 文件复制到工作目录中
- 运行 一次 maven 获取你的依赖然后再次打包它
- 从 openjdk 创建一个新的镜像库
- 将第 3 步的结果复制到您的应用图片中
- 公开一个端口
- 提供入口点
Docker文件中的内容如下:
FROM maven AS builder
WORKDIR /usr/src/analytics
COPY pom.xml .
RUN mvn -B dependency:go-offline
COPY . .
RUN mvn package
FROM openjdk:8-jdk-alpine
WORKDIR /analytics-service
COPY --from=builder /usr/src/analytics/target/YOUR_JAR_FILENAME.jar .
EXPOSE 80
ENTRYPOINT ["java", "-jar", "/analytics-service/YOUR_JAR_FILENAME.jar"]
在您 运行 之前,您需要知道您的 jar 文件是如何命名的。您可以 运行 在计算机上 Docker 之外的 mvn package 并查看生成的文件名。将其复制到 Docker 文件中上面的两个位置。