不要下载Docker版本上的所有Maven依赖关系
我试图创build一个Dockerfile然后build立一个Maven项目。
我不知道如何解决Dockerfile和什么命令然后执行。
我想知道如何运行构build,以便它不会在每次构build时都下载所有的Maven依赖关系,而源代码位于src /目录中却没有更改。
这是我的Dockerfile文件:
FROM maven:3.3.9-jdk-8 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app RUN cd /usr/src/app ADD pom.xml /usr/src/app RUN mvn dependency:resolve ADD src /usr/src/app RUN mvn package ENTRYPOINT ["mvn"] CMD ["package"]
我应该docker run --rm -it toolbox
命令还是docker run --rm -it toolbox
docker build -t toolbox .
命令?
上述两个命令都运行良好,除非它们都下载了所有的Maven依赖关系,即使源代码没有被触及。
这就是Docker的工作原理。 每次你做docker run
,它创build一个新的容器,不能访问旧容器中的文件。 所以,它下载它需要的所有依赖。 你可以通过声明一个外部音量来绕过这个问题。 看着Maven的Dockerfile
,它声明了一个卷/root/.m2
。 因此,您可以在主机中使用一个目录,并通过-v
选项将其附加到该卷。 你的Docker命令是,
`docker run -v <directory-in-your-host>:/root/.m2 <other-options-and-commands>
每次运行一个新的docker run
,Maven都会在下载依赖之前查看你的本地目录。
不过,我的问题是,为什么不先构build应用程序,然后使用生成的jar来创build泊坞窗图像,除非您有任何特定的原因。 您可以使用java基本映像创build自己的Dockerfile,或者使用docker docker-maven-plugin
类docker-maven-plugin
例如spotify 。 这让你的生活变得更轻松。