Spring Cloud基于Docker进行打包部署3-在容器中运行tomcat部署项目

本文介绍如何将Spring Boot应用从Jar包部署转换为War包部署,并详细解释了修改pom.xml文件、启动类,以及如何准备Tomcat基础镜像和制作项目镜像的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前使用jar包部署的,jar包部署有个问题就是jar包不解压,不方便在定位现场问题时修改配置文件。所以感觉以war包形式部署比较好。那么就需要做如下几方面工作:

1、修改各个模块的pom.xml文件及启动类

(1)将打包方式改为war包

(2)排除内置的tomcat并引入servlet api依赖

[html]  view plain  copy
  1. <!--引入spring boot的web-->  
  2.         <dependency>  
  3.             <groupId>org.springframework.boot</groupId>  
  4.             <artifactId>spring-boot-starter-web</artifactId>  
  5.             <!--排除内置的tomcat-->  
  6.             <exclusions>  
  7.                 <exclusion>  
  8.                     <groupId>org.springframework.boot</groupId>  
  9.                     <artifactId>spring-boot-starter-tomcat</artifactId>  
  10.                 </exclusion>  
  11.             </exclusions>  
  12.         </dependency>  
  13.   
  14.         <!--引入 servlet api-->  
  15.         <dependency>  
  16.             <groupId>javax.servlet</groupId>  
  17.             <artifactId>javax.servlet-api</artifactId>  
  18.         </dependency>  

(3)主函数启动类需要继承SpringBootServletInitializer,重写config方法

[java]  view plain  copy
  1. @SpringBootApplication  
  2. @EnableEurekaServer  
  3. public class ServerApplication_First extends SpringBootServletInitializer{  
  4.   
  5.     @Override  
  6.     protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  
  7.         return builder.sources(ServerApplication_First.class);  
  8.     }  
  9.   
  10.     public static void main(String[] args) {  
  11.         new SpringApplicationBuilder(ServerApplication_First.class).web(true).run(args);  
  12.     }  
  13. }  

2、准备tomcat基础镜像

可以在docker-hub中拉取官方tomcat镜像,也可以自己基于ubuntu镜像定制tomcat镜像。

如果自定义tomcat镜像,需要:

(1)首先下载好jdk、tomcat

  • server-jre-8u51-linux-x64.gz
  • apache-tomcat-8.0.24.tar.gz

(2)新建Dockerfile文件,内容如下:

FROM ubuntu
ADD server-jre-8u51-linux-x64.gz /usr/local
ADD apache-tomcat-8.0.24.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.0.24 /usr/local/tomcat
ENV CATALINA_HOME /usr/local/tomcat
ENV JAVA_HOME /usr/local/jdk1.8.0_51
EXPOSE 8080
ENV PATH $PATH:$JAVA_HOME/bin
  • (3)构建镜像
$ docker build -t tomcat .

3、制作项目镜像

这里注意一点,因为我们多个容器之间是用docker-compose的links参数关联在一起的(方法是设置/etc/hosts的域名解析)。所以如果多个容器的tomcat端口都是8080的话会产生冲突。所以需要每个容器中的tomcat开放不同的端口。

经过尝试后我们可以使用如下方法(在生成新镜像时覆盖原镜像setting.xml)达到目的:

(1)首先我们需要拿到基础镜像tomcat的setting.xml文件(防止tomcat版本不一):

使用交互模式将宿机目录挂载:

docker run –name tomcat -it -v /data/:/data/ tomcat /bin/bash

其中-v 是挂载目录   即第一个/data/ 是host 的  第二个/data/是容器镜像的

进入交互模式后 复制conf中的server.xml文件到data目录,这样我们就可以再host得到镜像tomcat的server.xml文件

(2) 得到这个文件后,可以修改自定义的端口(自行修改)。

改造Dockerfile文件:

[plain]  view plain  copy
  1. # 基于哪个镜像  
  2.   
  3. FROM tomcat  
  4.   
  5. # 指明镜像的维护人员 yyx  
  6.   
  7. MAINTAINER "yyx<xxx@xx.com>"  
  8.   
  9. # 将war文件添加到镜像中并重命名为 athena.war  
  10.   
  11. ADD *.war /usr/local/tomcat/webapps/athena.war  
  12.   
  13. # 将自定义的端口文件覆盖原镜像文件  
  14.   
  15. ADD server.xml /usr/local/tomcat/conf  
  16.   
  17. # 通过shell脚本运行tomcat  
  18.   
  19. CMD ["catalina.sh","run"]  

4、之后通过docker build命令或者docker-compose配置文件就可以构建、运行这些镜像了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值