文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

浅析Docker构建SpringBoot应用

2024-12-03 14:47

关注

 1.基于Dockerfile构建SpringBoot镜像

1.1准备工作

将SpringBoot项目通过maven打成jar包: mvn clean package

1.2使用Dockerfile构建镜像

  1. touch Dockerfile 
  1. FROM java:8 
  2. MAINTAINER  niugang<863263957@qq.com> 
  3. RUN mkdir -p /opt/springapp 
  4. ADD   demo-0.0.1.jar  /opt/springapp 
  5. EXPOSE 8088 
  6. ENTRYPOINT ["java","-jar","/opt/springapp/demo-0.0.1.jar"
  1. docker build -t springbootdemo:1.0 . 
  1. docker run -d  -p 8088:8088 --name sb springbootdemo:1.0  

在启动容器是可以添加数据卷,程序日志映射到宿主机,方便后期排查问题

注意:在启动过程中,一直起不起来,然后通过前台启动查看了日志。

报了如下错误:WARNING: IPv4 forwarding is disabled. Networking will not work.

解决:需要做如下配置

  1. vim/etc/sysctl.conf 
  2.  
  3. net.ipv4.ip_forward=1 #添加这段代码 

 重启network服务 

  1. systemctl restart network && systemctl restart docker 

查看是否修改成功 (备注:返回1,就是成功)

  1. [root@docker-node2 ~]# sysctl net.ipv4.ip_forward 
  2. net.ipv4.ip_forward = 1 

2.使用Maven插件构建Docker镜像

Maven是一个强大的项目管理与构建工具。如果可以使用Maven构建Docker镜像,以下几款Maven的Docker插件比较常用。

插件名称 官方地址 docker-maven-plugin https://github.com/spotify/docker-maven-plugin

上面插件可以从github看到此插件已经不再推荐了。推荐使用

https://github.com/spotify/dockerfile-maven 具体操作步骤上面有介绍

docker-maven-plugin https://github.com/fabric8io/docker-maven-plugin

docker-maven-plugin https://github.com/bibryam/docker-maven-plugin

2.1直接配置方式

在你的springboot应用的pom.xml中增加如下配置

  1.  
  2.                com.spotify 
  3.                docker-maven-plugin 
  4.                0.4.13 
  5.                 
  6.                    --用于指定镜像名称--> 
  7.                    niugang/springboot:3.0 
  8.                    --用于指定基础镜像,类似于Dockerfile中的FROM指令。--> 
  9.                    java 
  10.                    --类似于Dockerfile的ENTRYPOINT指令--> 
  11.                    ["java""-jar""/${project.build.finalName}.jar"] 
  12.                     
  13.                         
  14.                            --将打包后的资源文件复制到该目录--> 
  15.                            / 
  16.                            --需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面--> 
  17.                            ${project.build.directory} 
  18.                            --需要复制的文件,打包好的应用jar包。--> 
  19.                            ${project.build.finalName}.jar 
  20.                            
  21.                     
  22.                 
  23.             

 简要说明一下插件的配置:

  1. imageName:用于指定镜像名称,其中niugang是仓库名称,springboot是镜像名称,3.0是标签名称
  2. baseImage:用于指定基础镜像,类似于Dockerfile中的FROM指令。
  3. entrypoint:类似于Dockerfile的ENTRYPOINT指令。
  4. resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录。
  5. resources.resource.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。
  1. mvn clean package docker:build 

  1. docker run  -d -p 8088:8088 --name myspringboot niugang/springboot:3.0 

2.2 读取Dockerfile进行构建

在2.1中只需要在pom.xm中配置,执行命令就可以生成docker镜像。在很多时候希望通过Dockerfile生成Docker镜像。

  1. FROM java:8 
  2. MAINTAINER niugang<863263957@qq.com> 
  3. RUN  mkdir -p /docker/images 
  4. ADD demo-0.0.1-SNAPSHOT.jar /docker/images 
  5. ENTRYPOINT ["java","-jar","/docker/images/demo-0.0.1-SNAPSHOT.jar"

  1.  
  2.                com.spotify 
  3.                docker-maven-plugin 
  4.                0.4.13 
  5.                 
  6.                    --用于指定镜像名称--> 
  7.                    niugang/springboot:4.0             ${project.basedir}/src/main/resources/docker 
  8.                     
  9.                         
  10.                            --将打包后的资源文件复制到该目录--> 
  11.                            / 
  12.                            --需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面--> 
  13.                            ${project.build.directory} 
  14.                            --需要复制的文件,打包好的应用jar包。--> 
  15.                            ${project.build.finalName}.jar 
  16.                            
  17.                     
  18.                 
  19.              

 可以看到,不再制定baseImage和entrypoint,而是使用dockerDirectory指定Dockerfile所在路径。即时指定了baseImage和entrypoint也将被忽略。

  1. mvn clean package docker:build 

查看镜像

  1. docker images 
  1. docker run  -d -p 8088:8088 --name myspringboot niugang/springboot:4.0 

2.3 将插件绑定在某个phase执行

很多场景下,我们有这样的需求,执行例如 mvn clean package 时,插件就自动为我们构建Docker镜像。要想实现这点,我们只需将插件的goal绑定在某个phase即可。

phase和goal可以这样理解:maven命令格式是: mvn phase:goal ,例如 mvnpackagedocker:build 。那么,package和docker都是phase,build则是goal。

  1.  
  2.                 com.spotify 
  3.                 docker-maven-plugin 
  4.                 0.4.13 
  5.                 
  6.                     
  7.                        build-images 
  8.                        package 
  9.                         
  10.                            build 
  11.                         
  12.                     
  13.                 
  14.                  
  15.                     --用于指定镜像名称--> 
  16.                     niugang/springboot:5.0                    ${project.basedir}/src/main/resources/docker 
  17.                      
  18.                          
  19.                             --将打包后的资源文件复制到该目录--> 
  20.                             / 
  21.                             --需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面--> 
  22.                             ${project.build.directory} 
  23.                             --需要复制的文件,打包好的应用jar包。--> 
  24.                             ${project.build.finalName}.jar 
  25.                           
  26.                      
  27.                  
  28.              

  1. mvn clean package 

由配置可知,我们只需添加如下配置:

  1.  
  2.    
  3.     build-image 
  4.     package 
  5.      
  6.       build 
  7.      
  8.    
  9.  

 就可将插件绑定在package这个phase上。也就是说,用户只需执行 mvn package ,就会自动执行 mvn docker:build 。当然,读者也可按照需求,将插件绑定到其他的phase。

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯