简单的单体项目springboot后端Java服务部署
1.引入docker项目依赖
<docker.image.prefix>springboot</docker.image.prefix>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2.Dockerfile 新建
Dockerfile内容
# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER eangulee <2455876474@qq.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD taoci-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Duser.timezone=GMT+8","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Dockerfile是啥?
FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:FROM java:8表示使用 Jdk1.8 环境为基础镜像进行构建镜像。
VOLUME ,VOLUME 指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
ADD ,拷贝文件并且重命名
ENTRYPOINT,为了缩短Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT。
3.Idea中maven打包
生成jar文件
4.Linux上操作Docker
在服务器新建一个docker文件夹,将maven打包好的jar包和Dockerfile文件复制到服务器的docker文件夹下
5.上传Dockerfile 和 项目jar 包(上传服务器 docker文件夹)
6.在服务器进入docker文件夹****执行
执行下面命令, 看好,最后面有个"."点!
docker build -t springbootdemo4docker .
-t 参数是指定此镜像的tag名
7.执行之后
自动拉取jdk
8.启动容器
docker run -d -p 8091:9901 springbootdemo4docker
-d参数是让容器后台运行
-p 是做端口映射,此时将服务器中(也就是代码)的9901端口映射到容器中的8091(项目中端口配置的是9901 )端口
启动日志
docker logs 0dad54bf24d4 容器ID
结束
Linux部署Java项目启动时间(时区问题 【Duser.timezone=GMT+08】)
nohup java -Duser.timezone=GMT+08 -jar taoci-0.0.1-SNAPSHOT.jar &
docker时区问题
【在Dockerfile去指定时区】
Linux修复时区问题
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
出现【?】 直接输入 【y】