在 Docker 容器中部署 Java WAR 文件
1. 概述
在本教程中,我们将学习在Docker 容器中部署 Java WAR 文件。
我们将在Apache Tomcat 上部署 WAR 文件,这是一个在 Java 社区中广泛使用的免费开源 Web 服务器。
2. 将 WAR 文件部署到 Tomcat
WAR(Web 应用程序存档)是一个压缩的存档文件,它打包了所有与 Web 应用程序相关的文件及其目录结构。 为简单起见,在 Tomcat 上部署 WAR 文件 只不过是将 WAR 文件复制到 Tomcat 服务器的部署目录中。Linux 中的部署目录是*$CATALINA_HOME/webapps*。$CATALINA_HOME表示 Tomcat 服务器的安装目录。
在此之后,我们需要重新启动 Tomcat 服务器,它将在部署目录中提取 WAR 文件。
3. 在Docker容器中部署WAR
假设我们的应用程序有一个 WAR 文件ROOT.war,我们需要将其部署到 Tomcat 服务器。
为了实现我们的目标,我们需要首先创建一个 Dockerfile。此 Dockerfile 将包含运行我们的应用程序所需的所有依赖项。
此外,我们将使用此 Dockerfile 创建一个 Docker 映像,然后执行启动 Docker 容器的步骤。 现在让我们一一深入研究这些步骤。
3.1. 创建 Dockerfile
我们将使用Tomcat 的最新 Docker 镜像 作为 Dockerfile 的基础镜像。使用此映像的优点是所有必要的依赖项/包都已预先安装。例如,如果我们使用最新的 Ubuntu/CentOS Docker 镜像,那么我们需要手动安装 Java、Tomcat 和其他所需的软件包。
由于已经安装了所有必需的包,我们需要做的就是将 WAR 文件ROOT.war复制到 Tomcat 服务器的部署目录中。而已!
让我们仔细看看:
$ ls
Dockerfile ROOT.war
$ cat Dockerfile
FROM tomcat
COPY ROOT.war /usr/local/tomcat/webapps/
$CATALINA_HOME/webapps表示 Tomcat 的部署目录。**在这里,Tomcat 的官方 Docker 镜像的CATALINA_HOME 是 /usr/local/tomcat。结果,完整的部署目录将变成 /usr/local/tomcat/webapps。
我们在这里使用的应用程序非常简单,不需要任何其他依赖项。
3.2. 构建 Docker 镜像
现在让我们使用刚刚创建的 Dockerfile 创建 Docker 映像:
$ pwd
/blogdemo
$ ls
Dockerfile ROOT.war
$ docker build -t myapp .
Sending build context to Docker daemon 19.97kB
Step 1/2 : FROM tomcat
---> 710ec5c56683
Step 2/2 : COPY ROOT.war /usr/local/tomcat/webapps/
---> Using cache
---> 8b132ab37a0e
Successfully built 8b132ab37a0e
Successfully tagged myapp:latest
docker build命令将创建一个带有myapp 标签的 Docker 镜像。
**确保从 Dockerfile 所在的目录中构建 Docker 映像。*在上面的示例中,当我们构建 Docker 映像时,我们位于/blogdemo*目录中。
3.3. 运行 Docker 容器
到目前为止,我们已经创建了一个 Dockerfile 并从中构建了一个 Docker 映像。现在让我们运行 Docker 容器:
$ docker run -itd -p 8080:8080 --name my_application_container myapp
e90c61fdb4ac85b198903e4d744f7b0f3c18c9499ed6e2bbe2f39da0211d42c0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e90c61fdb4ac myapp "catalina.sh run" 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp my_application_container
此命令将使用 Docker 映像myapp启动一个名为 my_application_container的 Docker 容器。
**Tomcat 服务器的默认端口是 8080。**因此,在启动 Docker 容器时,请确保始终将容器端口 8080 与任何可用的主机端口绑定。为了简单起见,我们在这里使用了主机端口 8080。
3.4. 验证设置
现在让我们验证到目前为止我们所做的一切。我们将在浏览器中访问 URL http://IP:PORT 来查看应用程序。
这里,IP表示 Docker 主机的公共 IP(或在某些情况下为私有 IP)。PORT是我们在运行 Docker 容器(在我们的例子中为 8080)时暴露的容器端口。
我们还可以在 Linux 中使用curl 实用程序验证设置:
$ curl http://localhost:8080
Hi from Blogdemo!!!
在上面的命令中,我们从 Docker 主机执行命令。因此,我们可以使用localhost 连接到应用程序。作为响应,curl实用程序打印应用程序网页的原始 HTML。