使用Dockerfile部署SpringBoot项目
随着微服的务兴起手动部署Tomcat的方式逐渐被淘汰,每一个服务只要有基础的web功能就足够了。假如有100个微服务,不可能手动部署100次Tomcat,使用jar包才是最方便。另外Tomcat经常存在一些安全漏洞,每次做安全测评都需要升级Tomcat才能解决,试想一下如果100个微服务都需要升级Tomcat漏洞(手动安装、手动配置)…因此SpringBoot内嵌了轻量级的tomcat,配合docker将应用程序依赖的JRE环境,jar包制作成一个镜像并运行起来可以很大程度节约服务器资源、部署成本。
1、准备一个可运行的jar
包,用于测试如
[app@i-v6sas60k dockerfile]$ pwd
/home/app/soft/dockerfile
[app@i-v6sas60k dockerfile]$ ls
cache-0.0.1-SNAPSHOT.jar Dockerfile README.txt
2、编写Dockerfile
文件,如
# cache service image
# FROM 设置基础镜像java8
FROM openjdk:8-jdk-alpine
MAINTAINER laizhenghua<3299447929@qq.com>
# 切换工作目录
WORKDIR /
# 执行创建目录
RUN mkdir -p /service
# 执行切换目录
RUN cd /service
# 传递参数声明(后面build 时 使用 --build-arg 传递) 即微服务打包的jar包名字
ARG JAR_FILE
# 将指定的JAR_FILE拷贝到 /service/app.jar
COPY ${JAR_FILE} /service/app.jar
CMD echo ${JAR_FILE}
# 指定暴露的端口
EXPOSE 8080
# 执行jar
CMD ["nohup", "java", "-jar", "/service/app.jar", "--server.port=8081", "&"]
3、通过文件构建镜像
[app@i-v6sas60k dockerfile]$ docker build -f Dockerfile --build-arg JAR_FILE=cache-0.0.1-SNAPSHOT.jar -t cache-service:0.1 .
Sending build context to Docker daemon 44.14MB
...
[app@i-v6sas60k dockerfile]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cache-service 0.1 426921e13eb7 9 seconds ago 149MB
openjdk 8-jdk-alpine a3562aa0b991 3 years ago 105MB
[app@i-v6sas60k dockerfile]$
4、测试运行
[app@i-v6sas60k dockerfile]$ docker run --name cache-servie -p 8081:8081 -d cache-service:0.1
0353e616200a19d2263408bab1f269ee892ad89d72cc14cec0ea75522ae2e6de
[app@i-v6sas60k dockerfile]$ docker logs 03
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.7)
...
# 启动成功