栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

将SpringBoot项目打包为Docker镜像

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将SpringBoot项目打包为Docker镜像

SpringBoot项目打包为Docker镜像

随着微服务的发展,服务docker化成为潮流,本文记录下将SpringBoot项目打包为Docker的全过程,留作记录。

目录: 1、准备docker私服环境 2、服务docker打包配置 3、服务打包&运行验证 4、Docker相关指令 准备docker私服环境

准备一台服务器或虚拟机为Docker私服仓库,具体操作可参照【Docker环境配置】环境准备好后开放Docker API端口,供服务打包时的镜像上传。以及基础镜像准备。
开放docker私服API端口
在/usr/lib/systemd/system/docker.service中的【Service】-【ExecStart】中添加-H tcp://127.0.0.1:2375 如下:

$ sudo vi /usr/lib/systemd/system/docker.service


重新加载systemctl配置

$ sudo systemctl daemon-reload

重启Docker

$ sudo systemctl restart docker.service

查看netstat确认的输出是否dockerd正在侦听已配置的端口

$ sudo netstat -lntp | grep dockerd

如图则为操作成功

下载基础镜像(按需下载)

$ docker pull java:8

等待下载成功即可,注意若是虚拟机的话内存和磁盘均不可太小,否则会出现下载失败或者docker的服务运行失败等问题。

开启防火墙 构建端口(也可直接关闭防火墙)

$ firewall-cmd --zone=public --add-port=2375/tcp --permanent
$ firewall-cmd --reload
服务docker打包配置

构建一个Springboot项目,进行Docker镜像打包配置。
服务本地IDEA运行访问Swagger界面如图:

在项目pom.xml中添加如下配置:

 
      
          
              org.springframework.boot
              spring-boot-maven-plugin
              2.1.1.RELEASE
          
          
          
              org.apache.maven.plugins
              maven-resources-plugin
              3.1.0
          
          
          
              com.spotify
              docker-maven-plugin
              1.2.0
              
                  
                      build-image
                      package
                      
                          build
                      
                  
              
              
                  
                  
                      ${project.build.finalName}.jar
                  
                  
                  http://192.168.4.56:2375
                  
                  ${project.build.finalName}
                  
                  
                      ${project.version}
                  
                  
                  java
                  
                  ${project.basedir}/src/main/docker
                  
                  
                      
                          /
                          ${project.build.directory}
                          ${project.build.finalName}.jar
                      
                  
                  
                  true
              
          
      
      ${project.artifactId}
  

构建Dockerfile(注意:没有文件格式后缀)

# 服务运行所需基础依赖
FROM java:8
# 作者信息
MAINTAINER zp app@xxx.com
# 数据卷挂载地址
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN bash -c 'touch /app.jar'
#设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 容器运行端口
EXPOSE 8082
# java运行环境配置(非必须)
ENV JAVA_OPTS="
-server 
-Xms2048m 
-Xmx2048m 
-Xmn512m 
-XX:SurvivorRatio=8 
-XX:metaspaceSize=256m 
-XX:MaxmetaspaceSize=256m 
-XX:ParallelGCThreads=4 
-XX:+PrintGCDetails 
-XX:+PrintTenuringDistribution 
-XX:+PrintGCTimeStamps 
-XX:+HeapDumponOutOfMemoryError 
-XX:HeapDumpPath=/ 
-XX:+DisableExplicitGC 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC 
-XX:+CMSParallelRemarkEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:LargePageSizeInBytes=128M 
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyonly 
-XX:CMSInitiatingOccupancyFraction=80 
-XX:SoftRefLRUPolicyMSPerMB=0 
-XX:+PrintClassHistogram 
-XX:+PrintHeapAtGC 
-XX:+UnlockDiagnosticVMOptions 
-XX:+UnlockExperimentalVMOptions 
-XX:+PrintFlagsFinal 
-XX:GCLogFileSize=10M"
#运行docker是启动服务
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar

注意如上配置中的地址和资源路径,需对应。

服务打包&运行验证

在IDEA中的Terminal中进行mvn打包构建操作:

mvn clean install -Dmaven.test.skip=true

或者在电脑对应项目所在盘符路径中进行CMD运行以上指令打包。
打包指令完成后如图:

在到docker私服仓库中进行查看:

出现和服务配置相同的镜像则说明服务Docker镜像打包成功。
运行该镜像进行服务访问验证。
运行指令:

docker run -it -d --name doc --restart=always -p 8082:8082 documents:1.0

–name doc是对该镜像运行取的容器名称,可通过该名称查看运行的相关日志,若运行失败则通过日志进行排查:

docker logs doc

运行完成如图:


在浏览器中通过Docker私服访问该服务验证如图:

自此SpringBoot服务打包Docker镜像完成。

Docker相关指令
1.查看当前运行的所有容器
docker ps -a
2.停止所有容器(container),这样才能够删除其中的images:
docker stop $(docker ps -a -q)
3.如果想要删除所有容器(container)的话再加一个指令:
docker rm $(docker ps -a -q)
若这样删除失败可采用
docker rmi -f image_ID 
4.查看当前有那些镜像(images)
docker images
Dockerfile相关配置

查看菜鸟教程说明

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号