之前使用jar包部署的,jar包部署有个问题就是jar包不解压,不方便在定位现场问题时修改配置文件。所以感觉以war包形式部署比较好。那么就需要做如下几方面工作:
1、修改各个模块的pom.xml文件及启动类
(1)将打包方式改为war包
(2)排除内置的tomcat并引入servlet api依赖
<!--引入spring boot的web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除内置的tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引入 servlet api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
(3)主函数启动类需要继承SpringBootServletInitializer,重写config方法
@SpringBootApplication
@EnableEurekaServer
public class ServerApplication_First extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(ServerApplication_First.class);
}
public static void main(String[] args) {
new SpringApplicationBuilder(ServerApplication_First.class).web(true).run(args);
}
}
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文件:
# 基于哪个镜像
FROM tomcat
# 指明镜像的维护人员 yyx
MAINTAINER "yyx<xxx@xx.com>"
# 将war文件添加到镜像中并重命名为 athena.war
ADD *.war /usr/local/tomcat/webapps/athena.war
# 将自定义的端口文件覆盖原镜像文件
ADD server.xml /usr/local/tomcat/conf
# 通过shell脚本运行tomcat
CMD ["catalina.sh","run"]
4、之后通过docker build命令或者docker-compose配置文件就可以构建、运行这些镜像了。