热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mavendocker缓存依赖项

如何解决《Mavendocker缓存依赖项》经验,为你挑选了2个好方法。

我正在尝试使用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

图像构建,它确实下载了所有内容.但是,生成的图像与基本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在docker构建过程中的任何内容都会成为生成的图像的一部分.



1> Kim..:

通常,pom.xml文件没有变化,但是当您尝试启动docker映像构建时,其他src代码会发生变化.在这种情况下,你可以这样做:

供参考:

FROM maven:3-jdk-8

ENV HOME=/home/usr/app

RUN mkdir -p $HOME

WORKDIR $HOME

# 1. add pom.xml only here

ADD pom.xml $HOME

# 2. start downloading dependencies

RUN ["/usr/local/bin/mvn-entrypoint.sh", "mvn", "verify", "clean", "--fail-never"]

# 3. add all source code and start compiling

ADD . $HOME

RUN ["mvn", "package"]

EXPOSE 8005

CMD ["java", "-jar", "./target/dist.jar"]

所以关键是:

    添加pom.xml文件.

    然后mvn verify --fail-never它,它将下载maven依赖项.

    然后添加所有源文件,并开始编译(mvn package).

当您的更改pom.xml或您第一次运行此脚本时,docker将执行1 - > 2 - > 3.当pom.xml文件中没有更改时,docker将跳过步骤1,2并直接执行3.

这个简单的技巧可以用在许多其他包管理环境中.


尼斯,写了一篇关于这种方法以及使用壁球的文章,以减小最终图像的大小:https://medium.com/pismolabs/reducing-image-sizes-and-caching-maven-dependencies-in-docker-builds- b388d3f7aa88

2> Daniel Watro..:

事实证明,我用作基础的图像具有定义的父图像

VOLUME "$USER_HOME_DIR/.m2"

请参阅:https://github.com/carlossg/docker-maven/blob/322d0dff5d0531ccaf47bf49338cb3e294fd66c8/jdk-8/Dockerfile

结果是在构建期间,所有文件都被写入$USER_HOME_DIR/.m2,但由于它应该是卷,因此这些文件都不会与容器映像一起保留.

目前在Docker中没有任何方法可以取消注册该卷定义,因此有必要构建一个单独的maven图像,而不是使用官方的maven图像.


我使用Docker卷并告诉maven为我的maven存储库缓存使用不同的路径,例如`-Dmaven.repo.local =/mvn/.m2nrepo/repository`
推荐阅读
author-avatar
林子冰2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有