SpringBoot2.X在Docker中的部署(三)——SpringBoot项目在Tomcat镜像中的部署

  • 1.前言
  • 2.相关文章
  • 3.相关环境
  • 4.项目在Tomcat中部署
  • 4.1 Tomcat镜像下载
  • 4.2 Tomcat镜像的启动
  • 4.3 Tomcat镜像实例测试
  • 4.4 访问刚刚启动的Tomcat
  • 4.5 部署项目


1.前言

  本文是《SpringBoot2.X在Docker中的部署》系列的倒数第二篇。主要讲解如何将在上篇文章中的Demo工程部署至Tomcat镜像中。同时也填上一些之前两篇文章中挖的小坑。


3.相关环境

老规矩,先上我使用的环境

软件

版本

Mac

10.15.3

IDEA

2019.03

Maven

3.6.1

Docker

19.03.8(稳定版)

JDK

1.8

注:重要的事情说三遍,JDK版本是1.8,JDK版本是1.8,JDK版本是1.8!!!
  因为这关乎到后面是否可以成功部署!!!

4.项目在Tomcat中部署

4.1 Tomcat镜像下载

  使用在第一篇文章中讲到过的命令,即可下载镜像,若下载速度过慢,可参看第一篇文章配置国内镜像源。

//搜索镜像
docker search tomcat

//拉取镜像
docker pull tomcat:latest

//查看本地镜像
docker images

  通过这三步,即可将 tomcat的最新镜像从镜像仓库拉取到本地。如下图所示:

docker jar springboot 启动慢 springboot war 部署docker 中tomcat_Docker

4.2 Tomcat镜像的启动

  运行以下命令,启动Tomcat镜像

docker run --name tomcat -p 8081:8080 -v $PWD:/usr/local/tomcat/webapps/ -d tomcat

命令说明:
-p 80801:8080
  将容器的 8080 端口映射到主机的 8081 端口。
-v $PWD:/usr/local/tomcat/webapps/
  $PWD是宿主机的一个指定目录,该命令是将主机中当前目录 挂载到容器的 /webapps。通俗的来讲镜像中的/usr/local/tomcat/webapps/目录相当于$PWD的一个投影,$PWD中有什么,/usr/local/tomcat/webapps/中就会有什么。
–name tomcat
  表示当前镜像实例名称为tomcat,这个可以自己起名。

4.3 Tomcat镜像实例测试

  运行以下命令,进入Tomcat镜像实例集装箱

docker ps

  此时,终端上会显示刚刚启动的镜像实例,如图所示:

docker jar springboot 启动慢 springboot war 部署docker 中tomcat_Docker_02


  使用以下命令进入集装箱内部

docker exec -it 容器id(在上方复制即可) /bin/bash

docker exec -it 容器名称(即刚刚通过name指定的名称)  /bin/bash

4.4 访问刚刚启动的Tomcat

  在地址栏中输入:localhost:8081,然后你就会看见熟悉的tom猫。   看见这句,各位看官是不是内心一喜,仿佛看见了胜利女神在向你献吻。放心,胜利女神不会这么轻易让你得到的,她会在这儿挖个坑将你一脚揣进去。
  为什么要这样说呢?
  下面带大家来看看,在刚刚进入的tomcat镜像实例终端中执行以下命令。

cd /usr/local/tomcat/webapps

ls

  然后你就会发现目录下面空空如也。曾经熟悉的ROOT目录荡然无存。这就是镜像的一个小坑。你所熟悉的ROOT目录并不在webapps下面,而是在同级目录下的webapps.dist目录中。此时你只需要将对应的ROOT文件拷贝过去,再次在地址栏中输入localhost:8081,然后你就会看见熟悉的tom猫。
  这时,才算完成对Tomcat正常启动检验。

4.5 部署项目

  对创建的SpringBoot项目进行打包,这里要注意的是,只要clean install即可,不要使用 maven插件中的war命令。

  将打好的demo.war拷贝到之前启动tomcat镜像时指定的$PWD目录。

  然后新开一个终端,在其中输入docker ps查看镜像名称,然后输入docker restart 镜像名称。此时,可以使用docker log -f 镜像名查看项目是否正常启动。当看到下图,就说明启动成功。

docker jar springboot 启动慢 springboot war 部署docker 中tomcat_tomcat_03


  最后,可以在浏览器中输入localhost:8081/demo/test进行访问。

  这里还有两个小坑:

  1.SpringBoot部署在外部Tomcat中时,不支持通过资源名直接访问,如:localhost:8081/index.jsp。这样是不能访问的。

  2.在访问时 ,路径中一定要加上war包的名称,我这里的war名为demo.war所以访问时需要加上demo 结果如图所示:

docker jar springboot 启动慢 springboot war 部署docker 中tomcat_spring boot_04

  至此,一个SpringBoot项目成功在外部Tomcat中部署。

注:这里解释一下为什么要用jdk8。因为在当前的Tomcat镜像实例中的java版本为1.8,若项目版本低于jdk8应该可以运行,但若是高于jdk8,则很容易报错

PS:SpringBoot项目在Docker中的部署至此基本算是完成啦,本系列最后一篇文章主要是介绍如何用Nginx镜像来对Tomcat镜像进行反向代理做负载均衡,大家敬请期待!。