如何在 Docker 中配置 Java EE 应用的启动命令

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 彻底改变了我们开发、打包和部署应用程序的方式,包括 Java EE(企业版)应用程序。在本教程中,我们将指导你完成在 Docker 容器中运行的 Java EE 应用程序的启动命令配置过程,确保你的 Web 应用程序能够无缝部署和执行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-411519{{"如何在 Docker 中配置 Java EE 应用的启动命令"}} docker/start -.-> lab-411519{{"如何在 Docker 中配置 Java EE 应用的启动命令"}} docker/create -.-> lab-411519{{"如何在 Docker 中配置 Java EE 应用的启动命令"}} docker/pull -.-> lab-411519{{"如何在 Docker 中配置 Java EE 应用的启动命令"}} docker/build -.-> lab-411519{{"如何在 Docker 中配置 Java EE 应用的启动命令"}} end

Docker 容器简介

Docker 是一个广受欢迎的容器化平台,它允许开发者以一致且可重复的方式打包和部署应用程序。容器是轻量级、独立且自包含的单元,它们封装了应用程序、其依赖项以及必要的运行时环境。

什么是 Docker 容器?

Docker 容器是一种标准化的软件单元,它将应用程序的代码、依赖项和配置打包成一个单一的、可移植且可执行的包。容器与主机操作系统及其他容器相互隔离,确保应用程序部署的一致性和可靠性。

使用 Docker 容器的好处

  • 一致的环境:容器确保应用程序及其依赖项被打包在一起,消除了“在我的机器上能运行”的问题。
  • 可扩展性和灵活性:容器可以轻松地进行扩展或缩减,实现高效的资源利用和快速的应用程序部署。
  • 可移植性:容器化的应用程序可以在任何支持 Docker 的系统上运行,而无需考虑底层基础设施。
  • 提高效率:容器是轻量级的,并且共享主机操作系统的内核,从而实现更快的启动时间和更低的资源消耗。

Docker 架构

Docker 使用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程进行通信,Docker 守护进程负责构建、运行和管理 Docker 容器。

graph LD subgraph Docker Architecture client([Docker Client]) daemon([Docker Daemon]) client -- API --> daemon daemon -- Images/Containers --> storage([Docker Storage]) end

安装和配置 Docker

要开始使用 Docker,你需要在系统上安装 Docker 引擎。安装过程因操作系统而异。在本教程中,我们将以 Ubuntu 22.04 为例。

## 在 Ubuntu 22.04 上安装 Docker
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

安装完 Docker 后,你可以通过运行以下命令来验证安装:

docker version

这将显示 Docker 客户端和守护进程的版本信息。

配置 Java EE 应用程序的启动命令

在 Docker 容器中运行 Java EE 应用程序时,你需要配置启动命令,以确保应用程序在容器内能够正确启动和管理。

理解启动命令

Docker 容器中 Java EE 应用程序的启动命令通常使用 Dockerfile 中的 CMDENTRYPOINT 指令来定义。CMD 指令指定容器启动时要执行的默认命令,而 ENTRYPOINT 指令设置容器的基础命令。

以下是一个为 Java EE 应用程序设置启动命令的 Dockerfile 示例:

FROM openjdk:11-jdk-slim
COPY target/my-java-ee-app.war /app/
WORKDIR /app
CMD ["java", "-jar", "my-java-ee-app.war"]

在这个示例中,CMD 指令指定通过运行 java -jar my-java-ee-app.war 命令来启动 Java EE 应用程序。

自定义启动命令

在某些情况下,你可能需要为 Java EE 应用程序自定义启动命令。这可以通过修改 Dockerfile 中的 CMDENTRYPOINT 指令来完成。

例如,如果你的 Java EE 应用程序需要额外的命令行参数或环境变量,你可以按如下方式修改 CMD 指令:

FROM openjdk:11-jdk-slim
COPY target/my-java-ee-app.war /app/
WORKDIR /app
CMD ["java", "-Xmx512m", "-Dmy.app.env=production", "-jar", "my-java-ee-app.war"]

在这个示例中,CMD 指令包含了额外的 JVM 选项(-Xmx512m)和一个自定义环境变量(-Dmy.app.env=production),这些在容器启动时会传递给 Java 命令。

覆盖启动命令

你还可以在使用 docker run 命令运行 Docker 容器时覆盖启动命令。如果你需要在容器内运行不同的命令或脚本,或者想要向应用程序传递额外的参数,这会很有用。

docker run -d -p 8080:8080 my-java-ee-app-image java -jar /app/my-java-ee-app.war --spring.profiles.active=dev

在这个示例中,docker run 命令覆盖了 Dockerfile 中定义的启动命令,并使用特定的 Spring 配置文件(--spring.profiles.active=dev)运行 Java EE 应用程序。

在 Docker 中部署 Java EE 应用程序

一旦你为 Java EE 应用程序配置好了启动命令,就可以着手构建和部署 Docker 镜像了。

构建 Docker 镜像

要为你的 Java EE 应用程序构建 Docker 镜像,你可以使用 docker build 命令。假设你在当前目录下有一个 Dockerfile,你可以运行以下命令:

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

这将根据 Dockerfile 中的指令创建一个标签为 my-java-ee-app 的新 Docker 镜像。

运行 Docker 容器

构建好 Docker 镜像后,你可以使用 docker run 命令在 Docker 容器中运行 Java EE 应用程序:

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

此命令将基于 my-java-ee-app 镜像启动一个新容器,并将主机上的 8080 端口映射到容器内的 8080 端口。

验证部署

要验证 Java EE 应用程序是否在 Docker 容器中正确运行,你可以使用以下命令:

## 列出正在运行的容器

## 查看正在运行的容器的日志

## 在网页浏览器中访问应用程序

docker ps 命令将列出所有正在运行的容器,包括运行你的 Java EE 应用程序的容器。然后,你可以使用 docker logs 命令查看应用程序日志,并确保它正确启动。

最后,你可以通过访问 http://localhost:8080 在网页浏览器中访问正在运行的应用程序。

扩展应用程序

在 Docker 中运行 Java EE 应用程序的一个主要好处是能够轻松扩展应用程序。你可以运行多个 Docker 容器实例来处理增加的流量或负载。

要扩展应用程序,你可以使用像 Docker Compose 或 Kubernetes 这样的容器编排平台。这些工具允许你定义所需的容器实例数量,并自动管理应用程序的部署和扩展。

以下是一个 Docker Compose 文件的示例,它定义了 Java EE 应用程序的可扩展部署:

version: "3"
services:
  app:
    image: my-java-ee-app
    ports:
      - 8080:8080
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        order: rolling-update

在这个示例中,deploy 部分指定应用程序应部署 3 个副本,并且更新应使用滚动更新策略执行。

总结

通过遵循本教程中概述的步骤,你将学习如何为在 Docker 容器中运行的 Java EE 应用程序正确配置启动命令。这些知识将帮助你利用 Docker 容器的强大功能和灵活性,确保你的 Web 应用程序能够顺利部署和执行。