相关疑难解决方法(0)

Maven docker缓存依赖项

我正在尝试使用docker自动化maven构建.我想要构建的项目花了将近20分钟来下载所有依赖项,所以我尝试构建一个可以缓存这些依赖项的docker镜像,但它似乎并没有保存它.我的Dockerfile是

FROM maven:alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD pom.xml /usr/src/app
RUN mvn dependency:go-offline
Run Code Online (Sandbox Code Playgroud)

图像构建,它确实下载了所有内容.但是,生成的图像与基本maven:alpine图像的大小相同,因此它似乎没有缓存图像中的依赖项.当我尝试使用图像时,mvn compile它会经历整整20分钟的重新下载所有内容.

是否可以构建一个缓存我的依赖项的maven图像,这样每次我使用图像执行构建时都不必下载它们?

我正在运行以下命令:

docker build -t my-maven .

docker run -it --rm --name my-maven-project -v "$PWD":/usr/src/mymaven -w /usr/src/mymaven my-maven mvn compile
Run Code Online (Sandbox Code Playgroud)

我的理解是,RUN在docker构建过程中的任何内容都会成为生成的图像的一部分.

java maven docker dockerfile

28
推荐指数
7
解决办法
2万
查看次数

如何在多阶段docker构建中使用maven本地存储库?

我一直在尝试为我的 spring-boot-application 创建多阶段 docker 构建。问题在于master分支上的每次更改,pom.xml文件都会更改(感谢maven发布插件),因此在构建阶段很难使用docker build-cache,并且每次都会下载所有依赖项我运行构建的时间。据我所知,我无法在构建映像期间安装卷。docker 的实验版本允许您在构建期间安装卷,但它仍然是实验性的,所以我试图避免它。

所以我决定用 docker-compose 试试运气,第一个服务将在容器内运行“mvn package”并在共享卷内创建一个 jar 文件,然后第二个服务将使用该文件来构建自己的映像(基本上将该 jar 添加到其图像中),该图像将发布到 docker hub。无论我试图做什么似乎都不正确。现在我并不是真正的 docker-compose 专家,但是这是正确的方法吗?
我在用着Docker version 18.09.0, build 4d60db4

version: '3'
#Specify all the services you want to create
services:
  #service name
  build-service:
    context: .
    dockerfile: Dockerfile-build
    volumes:
      - ./:/usr/app
      - "$(HOME)"/.m2:/usr/mvn/.m2
  spring-app:
    conext: .
    dockerfile: Dockerfile-jar
    volumes:
      - ./:/usr/app
Run Code Online (Sandbox Code Playgroud)

有没有办法在第一阶段使用本地 .m2 存储库。或者有其他建议也欢迎。

java maven dockerfile docker-compose docker-multi-stage-build

5
推荐指数
1
解决办法
5798
查看次数