我正在尝试创建一个 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"]
Run Code Online (Sandbox Code Playgroud)
我应该运行docker run --rm -it toolbox命令还是docker build -t toolbox .命令?
上面这两个命令都运行良好,除了它们都下载了所有 Maven 依赖项,即使源代码没有被触及。
这就是 Docker 的工作原理。每次执行此操作时docker run,它都会创建一个新容器,该容器无法访问旧容器中的文件。因此,它会下载所需的所有依赖项。您可以通过声明外部卷来规避此问题。查看DockerfileMaven 的 ,它声明了一个 Volume /root/.m2。因此,您可以使用主机中的目录并通过-v选项将其附加到该卷。你的 Docker 命令是,
`docker run -v <directory-in-your-host>:/root/.m2 <other-options-and-commands>
Run Code Online (Sandbox Code Playgroud)
每次运行新的 Maven 时docker run,Maven 都会在下载依赖项之前查看本地目录。
但是,我的问题是,除非有任何具体原因,否则为什么不先构建应用程序并使用生成的 jar 来创建 docker 映像。您可以使用 java 基础映像创建自己的 Dockerfile,或者简单地使用现有的docker-maven-plugin类似Spotify之一。这让你的生活变得更加轻松。
| 归档时间: |
|
| 查看次数: |
6397 次 |
| 最近记录: |