技术需求点:
1.以Jar包方式部署SpringBoot应用;
2.以War包方式部署SpringBoot应用;
一.打包SpringBoot项目
将开发好的springboot程序打成jar包或war包,我这里用的maven工具打包的,打好的包上传到linux机器目录中,打包方式可自行搜索,不赘述。
二.定义Dockerfile文件,用于创建镜像
自定义Docker镜像详细的方法请参考我的上篇文章:自定义Docker镜像并推送到阿里云仓库
- 定义Jar包应用的Dockfile文件
#java运行程序,因此from java
FROM java
MAINTAINER leo
#将springboot-web-1.0.0.jar传到容器的/opt目录下
ADD springboot-web-1.0.0.jar /opt
#赋予springboot-web-1.0.0.jar可执行权限
RUN chmod +x /opt/springboot-web-1.0.0.jar
#启动容器时运行该程序
CMD java -jar /opt/springboot-web-1.0.0.jar
- 定义War包应用的Dockfile文件
#从官方tomcat镜像继承
FROM tomcat
MAINTAINER leo
RUN mv /usr/local/tomcat/webapps webapps1
RUN mv /usr/local/tomcat/webapps.dist webapps
#将springboot-web-1.0.0.war传到容器的/usr/local/tomcat/webapps目录下
ADD springboot-web-1.0.0.war /usr/local/tomcat/webapps
EXPOSE 8080
#启动容器时运行该程序
CMD /usr/local/tomcat/bin/catalina.sh run
jar包构建的不用解释,因为使用springboot内部的tomcat启动的,只需要依赖JDK环境;
war包的依赖于外部的tomcat镜像,提前从官方"docker pull tomcat"拉下来tomcat镜像,但是从官方下载的tomcat镜像的webapps文件夹很奇怪,按理说这个文件夹是各种根目录的文件,但是这里却是空的,反而多了webapps.dist文件夹,需要的根目录文件在这个文件夹里,因此把空的命名成webapps1,要用的webapps.dist重命名成webapps。
三.构建和运行镜像
构建镜像:
#jar包,镜像名称:leo-springboot-jar
docker build -t leo-springboot-jar .
#war包,镜像名称:leo-springboot-war
docker build -t leo-springboot-war .
tips:运行镜像之前,如果你的springboot项目依赖mysql、redis等环境,先将依赖的环境启动准备好。
运行镜像:
#jar包
docker run -d -p 8080:8080 leo-springboot-jar
#war包
docker run -d -p 8080:8080 leo-springboot-war
四.验证
jar访问时输入:http://192.168.33.100:8080/user,
war包访问时输入:http://192.168.33.100:8080/springboot-web-1.0.0/user,war包需要解压,解压后的文件是springboot-web-1.0.0,所以访问链接中需要加上文件名。
image.png五.部署过程Tips
1.从官方镜像拉下来的tomcat镜像的webapps文件夹为空问题,注意使用webapps.dist里面的内容,将webapps.dist命名为webapps!
2.端口问题:用jar包部署的方式,容器监听端口就是jar包中配置文件中的端口,而用war包部署的方式由于依赖外部的tomcat,必须修改tomcat的配置文件/tomcat/comf/servlet.xml才行,
3.我部署的方式与 Docker 部署war包项目 这篇文章部署的方式原理相同,都是将项目代码拷入到tomcat镜像的webapps文件中去运行,但是我这种部署方式好处是:通过将项目代码单独构建出镜像的方式,避免了重启容器之后springboot项目代码丢失的问题。当然,通过挂载共享文件夹的方式也可以实现,详情请参考 Docker 部署war包项目。
网友评论