我是 Docker 新手,不知道如何使用 maven 运行 java 项目,尽管我已经阅读了很多文档并尝试了很多方法。
- 我应该使用
Dockerfile
构建图像吗? - 使用
Dockerfile
在主机中运行 maven 项目时的命令是什么样的?
原文由 Yashon Lin 发布,翻译遵循 CC BY-SA 4.0 许可协议
我是 Docker 新手,不知道如何使用 maven 运行 java 项目,尽管我已经阅读了很多文档并尝试了很多方法。
Dockerfile
构建图像吗?Dockerfile
在主机中运行 maven 项目时的命令是什么样的?原文由 Yashon Lin 发布,翻译遵循 CC BY-SA 4.0 许可协议
可能有很多方法..但我通过以下两种方式实现
给定的例子是 Maven 项目。
1.在maven项目中使用Dockerfile
使用以下文件结构:
Demo
└── src
| ├── main
| │ ├── java
| │ └── org
| │ └── demo
| │ └── Application.java
| │
| └── test
|
├──── Dockerfile
├──── pom.xml
并将 Dockerfile 更新为:
FROM java:8
EXPOSE 8080
ADD /target/demo.jar demo.jar
ENTRYPOINT ["java","-jar","demo.jar"]
导航到项目文件夹并键入以下命令,您将能够创建映像并运行该映像:
$ mvn clean
$ mvn install
$ docker build -f Dockerfile -t springdemo .
$ docker run -p 8080:8080 -t springdemo
使用 Docker 在 Spring Boot 上 获取视频
2.使用Maven插件
在 pom.xml
中添加给定的maven插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.5</version>
<configuration>
<imageName>springdocker</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
导航到项目文件夹并键入以下命令,您将能够创建图像并运行该图像:
$ mvn clean package docker:build
$ docker images
$ docker run -p 8080:8080 -t <image name>
在第一个示例中,我们正在创建 Dockerfile 并提供基本映像并添加 jar ,然后我们将运行 docker 命令以构建具有特定名称的映像,然后运行该映像。
而在第二个示例中,我们使用的是 maven 插件,其中我们提供了 baseImage
和 imageName
所以我们不需要在这里创建 Dockerfile .. 打包 maven 项目后,我们将获得 docker 镜像我们只需要运行该图像..
原文由 Riddhi Gohil 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答2.5k 阅读✓ 已解决
2 回答3.9k 阅读
2 回答862 阅读✓ 已解决
工作示例。
这不是 Spring Boot 教程。这是关于如何在 Docker 容器中运行 Maven 构建的问题的更新答案。
问题最初发布于 4 年前。
1. 生成应用程序
使用 spring 初始化程序生成演示应用程序
https://start.spring.io/
在本地提取 zip 存档
2. 创建一个 Dockerfile
笔记
3. 构建镜像
4.运行镜像
杂项
阅读 Docker hub 文档,了解如何优化 Maven 构建以使用本地存储库来缓存 jar。
更新(2019-02-07)
这个问题现在已经 4 年了,在那个时候,可以说使用 Docker 构建应用程序已经发生了重大变化。
选项 1:多阶段构建
这种新样式使您能够创建不封装构建工具和源代码的更轻量级的图像。
此处的示例再次使用 官方 maven 基础映像来使用所需版本的 Maven 运行构建的第一阶段。文件的第二部分定义了如何将构建的 jar 组装成最终的输出图像。
笔记:
选项 2:吊臂
我没有使用过这种方法,但似乎值得研究,因为它使您能够构建图像而无需创建像 Dockerfiles 之类的讨厌的东西 :-)
https://github.com/GoogleContainerTools/jib
该项目有一个 Maven 插件,它将您的代码打包直接集成到您的 Maven 工作流程中。
原始答案(为了完整性而包括在内,但写于很久以前)
尝试使用新的官方图片,Maven 有一张
https://registry.hub.docker.com/_/maven/
该映像可用于在构建时运行 Maven 以创建已编译的应用程序,或者如以下示例所示,在容器中运行 Maven 构建。
示例 1 - 在容器中运行的 Maven
以下命令在容器内运行您的 Maven 构建:
笔记:
示例 2 - 使用 Nexus 缓存文件
运行 Nexus 容器
创建一个“settings.xml”文件:
现在运行链接到 nexus 容器的 Maven,以便缓存依赖项
笔记: