1.基于Dockerfile构建SpringBoot镜像
1.1准备工作
将SpringBoot项目通过maven打成jar包: mvn clean package
1.2使用Dockerfile构建镜像
- touch Dockerfile
- FROM java:8
- MAINTAINER niugang<863263957@qq.com>
- RUN mkdir -p /opt/springapp
- ADD demo-0.0.1.jar /opt/springapp
- EXPOSE 8088
- ENTRYPOINT ["java","-jar","/opt/springapp/demo-0.0.1.jar"]
- docker build -t springbootdemo:1.0 .
- docker run -d -p 8088:8088 --name sb springbootdemo:1.0
在启动容器是可以添加数据卷,程序日志映射到宿主机,方便后期排查问题
注意:在启动过程中,一直起不起来,然后通过前台启动查看了日志。
报了如下错误:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决:需要做如下配置
- vim/etc/sysctl.conf
- net.ipv4.ip_forward=1 #添加这段代码
重启network服务
- systemctl restart network && systemctl restart docker
查看是否修改成功 (备注:返回1,就是成功)
- [root@docker-node2 ~]# sysctl net.ipv4.ip_forward
- 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中增加如下配置
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>0.4.13</version>
- <configuration>
- <!--用于指定镜像名称-->
- <imageName>niugang/springboot:3.0</imageName>
- <!--用于指定基础镜像,类似于Dockerfile中的FROM指令。-->
- <baseImage>java</baseImage>
- <!--类似于Dockerfile的ENTRYPOINT指令-->
- <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
- <resources>
- <resource>
- <!--将打包后的资源文件复制到该目录-->
- <targetPath>/</targetPath>
- <!--需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面-->
- <directory>${project.build.directory}</directory>
- <!--需要复制的文件,打包好的应用jar包。-->
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- </configuration>
- </plugin>
简要说明一下插件的配置:
- mvn clean package docker:build
- docker run -d -p 8088:8088 --name myspringboot niugang/springboot:3.0
2.2 读取Dockerfile进行构建
在2.1中只需要在pom.xm中配置,执行命令就可以生成docker镜像。在很多时候希望通过Dockerfile生成Docker镜像。
- FROM java:8
- MAINTAINER niugang<863263957@qq.com>
- RUN mkdir -p /docker/images
- ADD demo-0.0.1-SNAPSHOT.jar /docker/images
- ENTRYPOINT ["java","-jar","/docker/images/demo-0.0.1-SNAPSHOT.jar"]
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>0.4.13</version>
- <configuration>
- <!--用于指定镜像名称-->
- <imageName>niugang/springboot:4.0</imageName> <dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
- <resources>
- <resource>
- <!--将打包后的资源文件复制到该目录-->
- <targetPath>/</targetPath>
- <!--需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面-->
- <directory>${project.build.directory}</directory>
- <!--需要复制的文件,打包好的应用jar包。-->
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- </configuration>
- </plugin>
可以看到,不再制定baseImage和entrypoint,而是使用dockerDirectory指定Dockerfile所在路径。即时指定了baseImage和entrypoint也将被忽略。
- mvn clean package docker:build
查看镜像
- docker images
- 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。
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>0.4.13</version>
- <executions>
- <execution>
- <id>build-images</id>
- <phase>package</phase>
- <goals>
- <goal>build</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <!--用于指定镜像名称-->
- <imageName>niugang/springboot:5.0</imageName> <dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
- <resources>
- <resource>
- <!--将打包后的资源文件复制到该目录-->
- <targetPath>/</targetPath>
- <!--需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面-->
- <directory>${project.build.directory}</directory>
- <!--需要复制的文件,打包好的应用jar包。-->
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- </configuration>
- </plugin>
- mvn clean package
由配置可知,我们只需添加如下配置:
- <executions>
- <execution>
- <id>build-image</id>
- <phase>package</phase>
- <goals>
- <goal>build</goal>
- </goals>
- </execution>
- </executions>
就可将插件绑定在package这个phase上。也就是说,用户只需执行 mvn package ,就会自动执行 mvn docker:build 。当然,读者也可按照需求,将插件绑定到其他的phase。
错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报...
DELETEFROMTablesWHEREIDNOTIN(SELECTMin(ID)FROMTablesGROUPBYName) Min的话保...
4月11日20:30~22:00通过腾讯会议进行了第二次在线学习讨论我把学习笔记整理一下...
项目中用到的一些特殊字符和图标 html代码 XML/HTML Code 复制内容到剪贴板 div ...
正则忽略大小写 – RegexOptions.IgnoreCase 例如: 复制代码 代码如下: Str = R...
工具:Eclipse,Oracle,smartupload.jar;语言:jsp,Java;数据存储:Oracle。...
上篇文章给大家介绍了 Java正则表达式匹配,替换,查找,切割的方法 ,接下来,...
Elasticsearch 是通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤。特...
本文实例讲述了Laravel框架源码解析之反射的使用。分享给大家供大家参考,具体如...
复制代码 代码如下: % URL="http://news.163.com/special/00011K6L/rss_newstop....