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的最新镜像从镜像仓库拉取到本地。如下图所示:
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 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 镜像名
查看项目是否正常启动。当看到下图,就说明启动成功。
最后,可以在浏览器中输入localhost:8081/demo/test
进行访问。
这里还有两个小坑:
1.SpringBoot部署在外部Tomcat中时,不支持通过资源名直接访问,如:localhost:8081/index.jsp
。这样是不能访问的。
2.在访问时 ,路径中一定要加上war包的名称,我这里的war名为demo.war
所以访问时需要加上demo
结果如图所示:
至此,一个SpringBoot项目成功在外部Tomcat中部署。
注:这里解释一下为什么要用jdk8。因为在当前的Tomcat镜像实例中的java版本为1.8,若项目版本低于jdk8应该可以运行,但若是高于jdk8,则很容易报错
PS:SpringBoot项目在Docker中的部署至此基本算是完成啦,本系列最后一篇文章主要是介绍如何用Nginx镜像来对Tomcat镜像进行反向代理做负载均衡,大家敬请期待!。