将 Web 应用部署到运行在 Docker 中的 Tomcat

在 Docker 中运行 Tomcat 中,我们演示了如何构建一个运行 Tomcat 的 Docker 镜像。本文将演示如何发布 Java Web 应用到该 Tomcat 中。

HelloServlet应用

在本文中,我们使用一个简单的、基于 Servlet 3 的 Java Web 应用, 该应用只需要一个简单的 Servlet 程序(不需要 web.xml 文件),然后将项目打包为 war 格式。

HelloServlet 的源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package cn.com.hohistar.study.servlet;

import java.io.IOException;
import java.net.InetAddress;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class HelloServlet
*/
@WebServlet({ "/HelloServlet", "/ok" })
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub

InetAddress iAddr;

iAddr = InetAddress.getLocalHost();
String host = iAddr.getHostAddress();

int port = request.getLocalPort();

response.getWriter().append("Served at: ").append(host).append(":").append(String.valueOf(port));
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

}

该 Servlet 响应 GET 和 POST 方法,简单的返回当前服务器的 IP 地址。

发布到 Docker 镜像中

将上面的 Java Web 项目打包为: hello-servlet-1.0.war, 然后使用下面的 Dockerfie 构建发布了应用的镜像

1
2
3
FROM tomcat8:1.0

COPY ./hello-servlet-1.0.war /opt/tomcat/tomcat-latest/webapps/hello-servlet-1.0.war

因为是基于 在 Docker 中运行 Tomcat 中构建的 tomcat8:1.0 这个镜像来构建的,因此只需要简单的复制 war 文件到 webapps 目录即可。

保存 Dockerfile 以后,可以在 Dockerfie 所在的目录执行:

1
docker build -t="hello-servlet:1.0" .

进行构建。构建完成后,可以执行以下命令启动一个容器:

1
docker run -d --name Hello-Srv -p 8080:8080 hello-servlet:1.0

现在, 可以使用浏览器访问:

1
http://localhost:8080/helo-servlet-1.0

查看返回结果了。 注意,返回的是 Docker 虚拟网络的地址

本文标题:将 Web 应用部署到运行在 Docker 中的 Tomcat

文章作者:Morning Star

发布时间:2020年12月15日 - 09:12

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/docker/docker-deploy-war-to-tomcat/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。