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
经过查阅网上资料得知,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小时的问题
容器中的时间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