1.基于Dockerfile构建SpringBoot镜像1.1准备工作通过maven将SpringBoot项目打成jar包:mvncleanpackage1.2使用Dockerfile构建镜像step1在存放jar的目录下创建DockerfiletouchDockerfilestep2编辑Dockerfile添加以下内容来自java:8MAINTAINERniugang<863263957@qq.com>RUNmkdir-p/opt/springappADDdemo-0.0.1.jar/opt/springappEXPOSE8088ENTRYPOINT["java","-jar","/opt/springapp/demo-0.0.1.jar"]step3构建镜像dockerbuild-tsspringbootdemo:1.0。step4启动容器dockerrun-d-p8088:8088--namesbspringbootdemo:1.0可以在启动容器的时候添加数据卷,程序日志映射到宿主机,方便后期排查问题注意:在启动过程中,我不能't一直起不来,然后通过前台启动查看日志。报告了以下错误:警告:IPv4转发已禁用。联网将不起作用。解决方法:需要做如下配置vim/etc/sysctl.confnet.ipv4.ip_forward=1#加入这段代码重启网络服务systemctlrestartnetwork&&systemctlrestartdocker查看是否修改成功(备注:返回1表示成功)[root@docker-node2~]#sysctlnet.ipv4.ip_forwardnet.ipv4.ip_forward=1step5调用你的springboot应用并验证它是否正确2.使用Maven插件构建Docker镜像Maven是一个强大的项目管理和构建工具。如果可以使用Maven构建Docker镜像,比较常用的有以下MavenDocker插件。插件名称官方地址docker-maven-pluginhttps://github.com/spotify/docker-maven-plugin上面的插件在github上可以看到已经不再推荐这个插件了。推荐使用https://github.com/spotify/dockerfile-maven具体操作步骤上面有介绍docker-maven-pluginhttps://github.com/fabric8io/docker-maven-plugindocker-maven-pluginhttps://github.com/bibryam/docker-maven-plugin2.1直接配置方法步骤1在你的springboot应用的pom.xml中添加如下配置com.spotifydocker-maven-plugin0.4.13niugang/springboot:3.0java["java","-jar","/${project.build.finalName}.jar"]/${project.build.directory}${project.build.finalName}.jar简单说明一下插件的配置:imageName:用来指定imagename,其中niugang为仓库名,springboot为镜像名,3.0为标签名baseImage:用于指定基础镜像,类似于Dockerfile中的FROM指令。entrypoint:类似于Dockerfile的ENTRYPOINT指令。resources.resource.directory:用于指定复制的根目录,${project.build.directory}代表目标目录。resources.resource.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar文件。step2进入代码路径,执行如下命令mvncleanpackagedocker:buildstep3查看镜像step4启动容器dockerrun-d-p8088:8088--namemyspringbootniugang/springboot:3.0step5访问测试2.2读取Dockerfile构建2.1只需要在pom.xm中配置并执行生成docker镜像的命令。很多时候,希望通过Dockerfile来生成Docker镜像。step1在项目src/main/resources目录下新建docker文件夹,文件夹下新建Dockerfile,添加如下内容FROMjava:8MAINTAINERniugang<863263957@qq.com>RUNmkdir-p/docker/imagesADDdemo-0.0.1-快照。jar/docker/imagesENTRYPOINT["java","-jar","/docker/images/demo-0.0.1-SNAPSHOT.jar"]step2pom.xml修改如下com.spotifydocker-maven-plugin0.4.13niugang/springboot:4.0${project.basedir}/src/main/resources/docker/${project.build.directory}${project.build.finalName}.jar可以看到baseImage和entrypoint不再制定,而是使用dockerDirectory指定Dockerfile所在的路径。即使指定了baseImage和entrypoint,它们也会被忽略。step3进入代码路径,执行如下命令mvncleanpackagedocker:build查看镜像dockerimagesstep4启动容器dockerrun-d-p8088:8088--namemyspringbootniugang/springboot:4.0step5访问测试2.3绑定插件到某阶段执行在很多场景下,我们都有这样的需求,比如在执行mvncleanpackage的时候,插件会自动为我们构建一个Docker镜像。要实现这一点,我们只需要将插件的目标绑定到某个阶段即可。Phase和goal可以这样理解:maven命令格式为:mvnphase:goal,例如mvnpackagedocker:build。然后,package和docker都是phase,build是goal。Step1编辑pom.xml内容如下com.spotifydocker-maven-plugin0.4.13build-imagespackagebuildniugang/springboot:5.0${project.basedir}/src/main/resources/docker/<目录>${项目.build.directory}${project.build.finalName}.jarstep2进入代码路径,执行如下命令mvncleanpackagestep3查看imageby配置显示,我们只需要添加如下配置:/execution>可以将插件绑定到包的阶段。也就是说,用户只需要执行mvnpackage,mvndocker:build就会自动执行。当然,读者也可以根据自己的需要将插件绑定到其他阶段。