docker部署springboot项目
打包jar包
-
找到idea的springboot项目
-
在pom.xml中配置如下依赖
<!-- Docker maven plugin --> <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> <plugin><!--编译跳过测试文件检查的生命周期--> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>
<java.version>11</java.version> <docker.image.prefix>springboot</docker.image.prefix> </properties>
-
配置application.yml
server: port: 8000 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://服务器ip:3306/sugwch?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: xxxx token: sign: 签名 time: 60*60*24*7 mybatis: mapper-locations: classpath:/mapper/*.xml #MyBatis使用pageHelper分页 pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true
-
使用maven打包
- 点击clean后执行
- 点击package后执行
- 执行完成后显示如下界面,左侧自动生成jar包
- 至此jar包打包完成
配置要创建的镜像
- 部署之前看一下自己的项目的jdk版本
-
登录Linux服务器
-
root目录下新建一个文件夹叫springboot-login,cd到该目录下,把刚才打包好的jar包传递到该目录下
-
同样在该目录下下载项目中对应的jdk版本,我这里是jdk15.0.1
wget https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_linux-x64_bin.tar.gz
-
还是在springboot-login目录下新建Dockerfile文件,里面内容如下
#1.指定基础镜像,并且必须是第一条指令 FROM centos:7 #3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录 WORKDIR /usr/local/java #4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径 ADD openjdk-15.0.1_linux-x64_bin.tar.gz /usr/local/java/ #6.配置环境变量 ENV JAVA_HOME=/usr/local/java/jdk-15.0.1 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH #7. VOLUME 指定了临时文件目录为/tmp # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp #8.将jar包添加到容器中并更名为app.jar ADD demo-0.0.1-SNAPSHOT.jar /app.jar EXPOSE 8000 #容器启动时需要执行的命令 这步不写也行 #CMD ["java","-version"] # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
最终springboot-login文件目录
创建镜像并运行
-
假设你的Linux服务器以及由docker环境
-
在springboot-login目录下执行
docker build -t springboot-login .
-
此时构建成功镜像,docker运行镜像即可
# 查看镜像id docker images # 后台运行springboot项目 -d表示后台运行 # -i表示即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。 # -p8000:8000 表示在容器里运行在8000端口的服务映射到主机8000端口上,第一个8000是容器里的,这里记得服务器的安全组加入8000端口开放 docker run -d -it -p8000:8000 springboot-login # 查看是否允许起来 docker ps
-
如果docker没有运行成功,可以先前台运行
docker ps -a #查看是否容器自动关闭,一般是因为springboot内部错误或者java环境有错误 # 可以直接在前台运行查看 docker run -p8000:8000 springboot-login
-
如果前台运行成功,关闭前台(重新启动一个窗口docker stop 容器id即可关闭)
-
前台没有运行成功因为jdk版本问题一般会报错,如果报错请重新检测jdk版本
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/hanzoy/sugwch/DemoApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
-
-
如果还没有运行成功也可以先在服务器上配置该jdk环境然后在服务器上运行jar包
-
环境配置如下
-
访问 https://jdk.java.net/15/ 复制下载链接
# 到服务器上用wget下载 wget https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_linux-x64_bin.tar.gz #解压 tar xvfz openjdk-15.0.1_linux-x64_bin.tar.gz #放到opt目录下 mv jdk-15.0.1 /opt/jdk-15.0.1 # 设置环境变量 vim /etc/profile i # 在文件的末尾添加 JAVA_HOME=/opt/jdk-15.0.1 PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME PATH Esc :wq # 手动黏贴到命令行里执行一下 JAVA_HOME=/opt/jdk-15.0.1 PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME PATH #测试 java -version # 如下即成功: openjdk version "15.0.1" 2020-10-20 OpenJDK Runtime Environment (build 15.0.1+9-18) OpenJDK 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)
-
root下新建文件夹叫javaPro,上传jar包到此目录下运行命令
java -jar demo-0.0.1-SNAPSHOT.jar#java -jar 包名
-
由于这里运行成功docker那没有运行成功,所以是docker的jdk环境有错误
-
-
运行成功关闭服务
-
查找端口的进程号(pid)
lsof -i:8000
-
杀死即可结束springboot项目的运行
sudo kill -9 pid
-
如果docker运行成功使用postman测试接口即可
停止服务删除镜像
# 查看容器id
docker ps
# 停止容器
docker stop 容器id
# 删除容器前查看所有容器
docker ps -a
# 删除容器
docker rm 容器id
# 查看镜像
docker images
# 删除镜像
docker rmi 镜像id
docker自定义jdk15.0.1镜像
# 创建一个文件,cd到该文件下载jdk
wget https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_linux-x64_bin.tar.gz
该目录下编写Dockerfile
#1.指定基础镜像,并且必须是第一条指令
FROM centos:7
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
ADD openjdk-15.0.1_linux-x64_bin.tar.gz /usr/local/java/
#6.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk-15.0.1
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
#CMD ["java","-version"]
- 接着打包成镜像
- 运行容器
docker run -d 容器名 -it 容器id /bin/bash
- 进入容器
docker exec -it 容器id /bin/bash
- 运行成功测试
java -version
或java
或javac