Doker部署springboot项目一:Centos7下使用打包好的jar包方式

一、环境准备

Centos7安装:整理中

linux下Doker下载安装:整理中

linux下jdk安装配置:整理中

linux下maven安装配置:整理中

二、项目部署

springboot项目打包成jar包后,上传到linux服务器中。

编写Dockerfile文件(该文件无文件后缀,idea中直接new file即可)

##使用 JDK 8 环境为基础镜像,如果镜像不是本地的将会从 DockerHub 进行下载
FROM openjdk:8-jdk-alpine
##指向了一个 /tmp 的目录,由于 Spring Boot 使用内置的 Tomcat 容器,Tomcat 默认使用 /tmp 作为工作目录,这个命令的效果是:在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到容器中的 /tmp 目录。
VOLUME /tmp
# 作者信息
MAINTAINER "zxl"
# 暴露8080端口
EXPOSE 8080
# 添加变量,如果使用dockerfile-maven-plugin,则会自动替换这里的变量内容
ARG JAR_FILE=hr.jar
# 往容器中添加jar包
ADD ${JAR_FILE} app.jar
# 启动镜像自动运行程序
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar","/app.jar"]

将jar包和Dockerfile放入同一文件夹下,开始制作镜像。

执行docker build命令,docker就会根据Dockerfile里你定义好的命令进行构建新的镜像。-t代表要构建的镜像的tag,.代表当前目录,也就是Dockerfile所在的目录。

docker build -t hr .

这里制作名为hr的镜像。

启动容器。

-d 参数是让容器后台运行
-p 宿主机port:容器port,此时将宿主机中的8899端口映射到容器中的8080(项目中端口配置的是8080)端口

docker run -d -p 8899:8080 hr

容器启动成功后,访问网页即可。

http://ip:8899/项目名

三、部署中会遇到的问题

1.登录页面访问时验证无法显示,查看容器日志发现报错java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion

Doker部署springboot项目一:Centos7下使用打包好的jar包方式_第1张图片

经过查阅网上资料得知,openjdk1.8里是不存在awt的jar包的,需要在linux环境中安装。

yum install fontconfig
fc-cache --force

重新启动容器后,依旧报错。

在Dockerfile中加入命令

apk add fontconfig
apk add --update ttf-dejavu
fc-cache --force

 最后Dokcerfile的文件:

##使用 JDK 8 环境为基础镜像,如果镜像不是本地的将会从 DockerHub 进行下载
FROM openjdk:8-jdk-alpine
##指向了一个 /tmp 的目录,由于 Spring Boot 使用内置的 Tomcat 容器,Tomcat 默认使用 /tmp 作为工作目录,这个命令的效果是:在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到容器中的 /tmp 目录。
VOLUME /tmp
# 作者信息
MAINTAINER "zxl"
# 暴露8080端口
EXPOSE 8080
# 添加变量,如果使用dockerfile-maven-plugin,则会自动替换这里的变量内容
ARG JAR_FILE=hr.jar
# 往容器中添加jar包
ADD ${JAR_FILE} app.jar
# 启动镜像自动运行程序
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar","/app.jar"]

##Dockerfile中直接能够运行的命令
##保证awt的使用
RUN apk add fontconfig
RUN apk add --update ttf-dejavu
RUN fc-cache --force

上传文件后删除容器镜像,重新制作运行,验证码成功显示。

2.日志时间少了8小时的问题

Doker部署springboot项目一:Centos7下使用打包好的jar包方式_第2张图片

容器中的时间8点,但是系统时间是16点,在Dokerfile中加入命令

 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 echo "Asia/Shanghai" > /etc/timezone

即可解决,Dockerfile最终的内容:

##使用 JDK 8 环境为基础镜像,如果镜像不是本地的将会从 DockerHub 进行下载
FROM openjdk:8-jdk-alpine
##指向了一个 /tmp 的目录,由于 Spring Boot 使用内置的 Tomcat 容器,Tomcat 默认使用 /tmp 作为工作目录,这个命令的效果是:在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到容器中的 /tmp 目录。
VOLUME /tmp
# 作者信息
MAINTAINER "zxl"
# 暴露8080端口
EXPOSE 8080
# 添加变量,如果使用dockerfile-maven-plugin,则会自动替换这里的变量内容
ARG JAR_FILE=hr.jar
# 往容器中添加jar包
ADD ${JAR_FILE} app.jar
# 启动镜像自动运行程序
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar","/app.jar"]

##Dockerfile中直接能够运行的命令
##保证awt的使用
RUN apk add fontconfig
RUN apk add --update ttf-dejavu
RUN fc-cache --force

##保证容器的时区和宿主机相同
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

##保证log日志的时区和宿主机相同
RUN echo "Asia/Shanghai" > /etc/timezone

 

你可能感兴趣的:(Docker)