如何在 Docker 容器中构建 Java EE Web 应用程序

DockerBeginner
立即练习

简介

在本教程中,你将学习如何构建一个 Java EE Web 应用程序并将其部署到 Docker 容器中。Docker 是一个流行的容器化平台,它允许你将应用程序及其依赖项打包成一个单一的、可移植的单元,从而更轻松地开发、测试和部署软件。在本指南结束时,你将更好地理解如何利用 Docker 简化 Java EE Web 应用程序的开发和部署。

Docker 与 Java EE 简介

什么是 Docker?

Docker 是一个开源平台,它允许开发者在容器中构建、部署和运行应用程序。容器是轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。通过在不同的计算平台上提供一致且可靠的环境,Docker 简化了创建、部署和管理应用程序的过程。

什么是 Java EE?

Java EE(Java 企业版)是用于开发和运行大规模企业级应用程序的 Java API 和运行时环境的集合。它为构建分布式、多层 Java 应用程序提供了一组标准的服务、API 和协议。Java EE 包括诸如 Web 服务、安全性、事务管理等功能,使其成为构建企业级 Web 应用程序的热门选择。

使用 Docker 对 Java EE 应用程序进行容器化的优势

使用 Docker 对 Java EE 应用程序进行容器化有以下几个好处:

  • 一致的部署:Docker 容器确保应用程序及其依赖项被打包在一起,在不同的计算平台上提供一致且可靠的环境。
  • 可扩展性:Docker 使根据需求轻松扩展应用程序的规模变得容易,从而提高整体系统性能和资源利用率。
  • 隔离性:容器提供高度的隔离性,确保一个应用程序的依赖项或配置不会干扰在同一主机上运行的其他应用程序。
  • 可移植性:Docker 容器可以在不同环境(例如开发、预发布、生产)之间轻松移动,而无需进行复杂的配置更改。
  • 高效性:与传统虚拟机相比,Docker 容器轻量级且使用的资源更少,使其在部署和运行应用程序时更高效。

开始使用 Docker 和 Java EE

要开始使用 Docker 和 Java EE,你的系统上需要安装 Docker。你可以从 Docker 官方网站(https://www.docker.com/get-started)下载并安装 Docker。安装好 Docker 后,你就可以开始在 Docker 容器中构建和运行你的 Java EE 应用程序了。

graph TD A[Java EE 应用程序] --> B[Docker 容器] B --> C[Docker 主机] C --> D[Docker 引擎] D --> E[主机操作系统]

在下一节中,我们将更深入地探讨开发 Java EE Web 应用程序并使用 Docker 对其进行容器化的过程。

开发 Java EE Web 应用程序

创建 Java EE Web 应用程序

要开发 Java EE Web 应用程序,你可以使用诸如 IntelliJ IDEA、Eclipse 或 NetBeans 之类的集成开发环境(IDE)。这些 IDE 提供了简化开发过程的工具和框架。

以下是一个如何使用 Jakarta EE(以前称为 Java EE)创建简单 Java EE Web 应用程序的示例:

  1. 创建新项目:在你的 IDE 中,创建一个新的 Maven 或 Gradle 项目,并选择“Java EE”或“Jakarta EE”项目模板。
  2. 添加依赖项:在项目的 pom.xmlbuild.gradle 文件中,为你的 Java EE Web 应用程序添加必要的依赖项,例如 jakarta.servlet-apijakarta.faces-api 以及你计划使用的任何其他库。
  3. 开发应用程序逻辑:创建你的 Java 类、JSF(JavaServer Faces)或 Servlet 组件以及其他必要的文件,以实现 Web 应用程序的业务逻辑。
  4. 配置 Web 应用程序:在你的项目中,创建一个 web.xml 文件(或使用注解)来配置 Servlet、过滤器和其他 Web 应用程序设置。
  5. 构建并测试应用程序:使用 IDE 的构建和运行功能在本地编译、打包并测试你的 Java EE Web 应用程序。
graph TD A[Java EE Web 应用程序] --> B[Jakarta EE API] B --> C[Servlet 容器] C --> D[应用服务器] D --> E[主机操作系统]

部署 Java EE Web 应用程序

一旦你开发了 Java EE Web 应用程序,就可以将其部署到应用服务器,如 Apache Tomcat、WildFly 或 GlassFish。部署过程通常包括以下步骤:

  1. 打包应用程序:使用 IDE 或构建工具(例如 Maven、Gradle)将你的 Java EE Web 应用程序打包成 WAR(Web 应用程序存档)文件。
  2. 部署 WAR 文件:将 WAR 文件复制到应用服务器的部署目录,或者使用服务器的管理控制台来部署应用程序。
  3. 启动应用服务器:如果应用服务器尚未运行,则启动它以部署和运行你的 Java EE Web 应用程序。

部署应用程序后,你可以使用适当的 URL(例如 http://localhost:8080/your-app)通过 Web 浏览器访问它。

既然你已经对开发 Java EE Web 应用程序有了基本的了解,接下来让我们进入下一步:使用 Docker 对应用程序进行容器化和部署。

对 Java EE 应用程序进行容器化和部署

为 Java EE Web 应用程序创建 Docker 镜像

要使用 Docker 对 Java EE Web 应用程序进行容器化,你需要创建一个 Docker 镜像。以下是一个你可以使用的 Dockerfile 示例:

## 使用包含 Java 和应用服务器的基础镜像
FROM openjdk:11-jdk-slim as builder

## 将 Java EE Web 应用程序 WAR 文件复制到容器中
COPY target/*.war /app.war

## 使用轻量级应用服务器镜像作为最终镜像
FROM tomcat:9.0-jdk11-openjdk-slim

## 将 WAR 文件复制到 Tomcat 的 webapps 目录
COPY --from=builder /app.war /usr/local/tomcat/webapps/

## 暴露默认的 Tomcat 端口
EXPOSE 8080

## 启动 Tomcat 服务器
CMD ["catalina.sh", "run"]

在这个示例中,我们使用了多阶段构建过程。第一阶段 builder 将 Java EE Web 应用程序 WAR 文件复制到容器中。第二阶段 tomcat:9.0-jdk11-openjdk-slim 是一个轻量级的 Tomcat 镜像,用作最终镜像。然后将 WAR 文件复制到 Tomcat 的 webapps 目录,并启动 Tomcat 服务器。

构建并运行 Docker 镜像

要构建 Docker 镜像,在包含 Dockerfile 的目录中运行以下命令:

docker build -t my-java-ee-app.

这将创建一个标签为 my-java-ee-app 的 Docker 镜像。

要运行 Docker 容器,使用以下命令:

docker run -p 8080:8080 my-java-ee-app

这将启动 Docker 容器,并将容器的 8080 端口映射到主机的 8080 端口,使你能够通过 Web 浏览器在 http://localhost:8080 访问 Java EE Web 应用程序。

将 Java EE 应用程序部署到 Docker Swarm 或 Kubernetes

一旦你的 Java EE Web 应用程序被容器化并在 Docker 容器中运行,你就可以将其部署到 Docker Swarm 或 Kubernetes 集群,以实现可扩展性和高可用性。

在 Docker Swarm 中,你可以使用 docker service create 命令创建一个服务,指定 Docker 镜像和任何必要的配置选项。

在 Kubernetes 集群中,你可以创建一个 Deployment、Service 和其他 Kubernetes 资源来管理 Java EE Web 应用程序的部署和扩展。

graph TD A[Java EE Web 应用程序 Docker 镜像] --> B[Docker 容器] B --> C[Docker Swarm 或 Kubernetes] C --> D[生产环境]

通过对你的 Java EE Web 应用程序进行容器化并将其部署到容器编排平台,你可以利用 Docker 的优势,如一致的部署、可扩展性和可移植性,以确保企业级 Web 应用程序的可靠和高效运行。

总结

本教程提供了一份关于如何构建 Java EE Web 应用程序并将其部署到 Docker 容器中的全面指南。通过对你的 Java EE 应用程序进行容器化,你可以在不同环境中受益于更高的可移植性、可扩展性和一致性。Docker 简化了部署过程,并确保你的应用程序无论在何种底层基础设施上都以相同的方式运行。凭借从本教程中学到的知识,你现在可以自信地使用 Docker 来简化 Java EE Web 应用程序的开发和部署。