不要在Docker构建

时间:2016-07-10 14:42:20

标签: maven docker

我试图创建一个Dockerfile然后构建一个Maven项目。

我想知道如何修复Dockerfile以及然后执行什么命令。

我想知道如何运行构建,以便在每次构建时不会下载所有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 build -t toolbox .命令?

上述两个命令都可以正常运行,除非它们都下载了所有Maven依赖项,即使没有触及源代码也是如此。

1 个答案:

答案 0 :(得分:4)

这就是Docker的工作方式。每次执行docker run时,它都会创建一个新容器,该容器无法访问旧容器中的文件。因此,它会下载所需的所有依赖项。您可以通过声明外部卷来规避这一点。查看Maven的Dockerfile,它声明了一个卷/root/.m2。因此,您可以使用主机中的目录,并通过-v选项将其附加到此卷。你的Docker命令是,

`docker run -v <directory-in-your-host>:/root/.m2 <other-options-and-commands>

每次运行新的docker run时,Maven都会在下载依赖项之前查看您的本地目录。

但是,我的问题是为什么不首先构建你的应用程序并使用生成的jar来创建docker镜像,除非你有任何特定的原因。您可以使用java基础映像创建自己的Dockerfile,或者只使用其中docker-maven-plugin之类的spotify。这会让你的生活变得更轻松。