Docker 化 Java 应用程序
最后修改时间:2023 年 3 月 27 日您可以使用 Docker 将已编译的 Java 应用程序以及特定的运行时环境和任何其他必要的依赖项打包到映像中。然后,您可以从该映像运行容器,以查看应用程序将如何在此环境中运行。这称为应用程序的docker 化。
本教程介绍如何创建 Dockerfile 以使用 OpenJDK 17 和已编译的 Java 应用程序构建 Docker 映像。它还展示了如何与其他人共享此映像并从中运行 Docker 容器。
笔记
在开始之前,请安装并运行 Docker,启用 Docker 插件,并连接到 IntelliJ IDEA 中的 Docker 守护程序。有关更多信息,请参阅IntelliJ IDEA 中的 Docker 入门。
创建一个新的Java项目
本教程的示例应用程序将包含一个HelloWorld.java文件,该文件打印Hello, World!
到控制台并退出。
转到文件| 新 | 项目。
在“新建项目”对话框中,选择“新建项目”并将项目命名为
DockerHelloWorld
。在src目录中创建主 Java 类文件HelloWorld.java。
为此,在“项目”工具窗口中,右键单击src目录,指向“新建”,然后单击“Java 类”。在“新建 Java 类”对话框中,键入
HelloWorld
并按。Enter将以下代码粘贴到新文件中:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
尝试编译并运行该应用程序。
单击装订线并选择Run 'HelloWorld.main()'。
您应该看到打印到运行
Hello, World!
工具窗口的控制台。
默认情况下,IntelliJ IDEA 将输出编译到项目目录中/out /product /DockerHelloWorld/下的HelloWorld.class文件,其中是当前模块的名称。DockerHelloWorld
创建 Dockerfile
在“项目”工具窗口中,右键单击项目名称,指向“新建”,然后单击“文件”。
在“新建文件”对话框中,输入Dockerfile并按。Enter
将以下代码粘贴到新的 Dockerfile 中:
FROM openjdk:17 COPY ./out/production/DockerHelloWorld/ /tmp WORKDIR /tmp ENTRYPOINT ["java","HelloWorld"]
此 Dockerfile 包含基于Docker Hubopenjdk:17
中的映像构建映像的说明。当您从此映像运行容器时,Docker 会将项目输出目录的内容复制到容器中的/tmp目录(在本例中,输出目录包含主类HelloWorld.class)。然后 Docker 将当前工作目录设置为/tmp并运行。因此,您应该看到打印到容器日志中。java HelloWorld
Hello, World!
构建并运行镜像
在 Dockerfile 内的装订线中,单击并选择Run on 'Docker'。
IntelliJ IDEA 创建一个Dockerfile 运行配置,它从 Dockerfile 构建一个映像,然后基于该映像运行一个容器。要查看整个过程,请打开“服务”工具窗口中的“日志”选项卡。
例如,您可以与其他人共享映像,以准确演示您的应用程序预期如何运行,而无需安装必要的运行时(仅需要 Docker)。
笔记
要共享构建的镜像,您需要配置一个具有推送镜像权限的Docker 注册表。例如,您可以在Docker Hub上创建帐户并使用公共或私有存储库共享映像,或者设置您自己的Docker 注册表。
将您的 Java 应用程序共享为 Docker 映像
在“服务”工具窗口中,找到从 Dockerfile 构建的映像。
默认情况下,它由唯一的图像 ID 指定,因为创建图像时没有提供图像标签。您可以编辑相应的运行配置,指定您选择的图像标签,然后再次运行该配置。
要查找图像,请右键单击正在运行的容器,然后选择图像 | 显示图像。
右键单击具有所需 ID 的图像,然后在上下文菜单中单击推送图像...。
在“推送映像”对话框中,选择您的注册表,指定映像的存储库名称和标签,然后单击“确定”。
一旦 Docker 将映像推送到注册表,任何有权访问该映像的人都可以提取该映像并从该映像运行容器。您可以确保它们将在您在 Dockerfile 中设置的特定运行时版本上运行应用程序的确切版本。
感谢您的反馈意见!