在 在 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;
@WebServlet({ "/HelloServlet", "/ok" }) public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L;
public HelloServlet() { super(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 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)); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 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 虚拟网络的地址