1. 概述
在这个教程中,我们将学习如何在Docker容器中部署Java WAR文件。
我们将把WAR文件部署到Apache Tomcat,这是一个广泛应用于Java社区的免费开源web服务器。
2. 将WAR文件部署到Tomcat
WAR(Web应用程序归档)是一个包含所有与web应用相关的文件及其目录结构的压缩存档文件。
为了简化,将WAR文件部署到Tomcat(/tomcat-deploy-war)的过程就是将该WAR文件复制到Tomcat服务器的部署目录。在Linux中,部署目录是$CATALINA_HOME/webapps
。$CATALINA_HOME
表示Tomcat服务器的安装目录。
接下来,我们需要重启Tomcat服务器,它将在部署目录中提取WAR文件。
3. 在Docker容器中部署WAR文件
假设我们有一个名为ROOT.war
的应用程序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的部署目录。对于官方的Docker镜像,CATALINA_HOME
是/usr/local/tomcat
,因此完整的部署目录将是/usr/local/tomcat/webapps
。
这里我们使用的应用程序非常简单,不需要其他依赖。
3.2. 构建Docker镜像
现在,使用我们刚刚创建的Dockerfile来构建Docker镜像:
$ pwd
/baeldung
$ 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镜像时,我们在/baeldung
目录下。
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. 验证设置
现在,让我们验证我们所做的所有操作。我们将访问浏览器中的URLhttp://<IP>:<PORT>
来查看应用程序。
这里的IP
表示Docker主机机器的公共IP(在某些情况下可能是私有IP)。PORT
是我们运行Docker容器时暴露的容器端口(在本例中是8080)。
我们也可以使用Linux中的curl
工具进行验证:
$ curl http://localhost:8080
Hi from Baeldung!!!
在上述命令中,我们是从Docker主机机器执行命令的,因此我们可以使用localhost
连接到应用程序。curl
工具会打印出应用程序网页的原始HTML。
4. 总结
在这篇文章中,我们学习了如何在Docker容器中部署Java WAR文件。我们从使用官方Tomcat Docker镜像创建Dockerfile开始,然后构建Docker镜像并运行应用程序容器。
最后,我们通过访问应用程序URL来验证设置。