欢迎光临
我们一直在努力

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

1、说明:

docker容器化部署是非常流行的,Java应用如果要运行在docker环境,就要制作包含该应用的docker镜像,可以手动使用dockerfile和docker-compose制作镜像,也可以使用插件docker-maven-plugin和jib-maven-plugin制作镜像;本文只讲这两种插件的使用以及需要注意的一些细节;以springboot项目为例,详细介绍下这两种用法!

2、jib-maven-plugin实现方式

2.1 搭建springboot项目

搭建过程在此不过多演示,如果想自己尝试,或者查看我的源码,可以去我的仓库下载:springboot-docker

2.2 编写pom.xml配置

<properties> <java.version>1.8</java.version> <!--通过registry搭建的私有镜像仓库地址--> <registryUrl>192.168.100.64:5000</registryUrl> </properties> <!--使用jib插件--> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.3.0</version> <configuration> <!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字--> <from> <!--使用私有仓库镜像,tag是8--> <image>${registryUrl}/java:8</image> <!-- 也可以使用docker hub提供的,有时下载不下来 --> <!-- <image>docker.io/library/java:8</image>--> </from> <to> <!--镜像名称和tag,其中使用了mvn内置变量${project.version},表示当前工程的version--> <image>${registryUrl}/dxiaodang/jib:${project.version}</image> <!--或者也可以使用tags标签单独指定version --> <!--<tags> <tag>${project.version}</tag> </tags>--> </to> <!--私服是http不是https,默认jib不推送到非https的私服,私服添加,公服不添加--> <allowInsecureRegistries>true</allowInsecureRegistries> <!--容器相关的属性--> <container> <!--jvm内存参数--> <jvmFlags> <jvmFlag>-Xms4g</jvmFlag> <jvmFlag>-Xmx4g</jvmFlag> <jvmFlag>-Duser.timezone=Asia/Shanghai</jvmFlag> </jvmFlags> <!--暴露的端口--> <ports> <port>8080</port> </ports> <!--设置镜像的创建时间为系统时间--> <useCurrentTimestamp>true</useCurrentTimestamp> </container> </configuration> </plugin> 

✌️ 注意点(本文的精髓)✌️

  1. from节点设置基础镜像,获取的方式有三种:
  • 使用openjdk官方镜像
  • 使用自己的私有仓库的镜像,并将base镜像放入到私有仓库;私有仓库搭建请参考:docker搭建私有镜像仓库
  • 使用docker hub提供的
  1. 镜像打包方式分为三种:
  • build:镜像推送到远程仓库;可以推送到docker hub上,也可以推送到自己的私有仓库;
    •  如果镜像要推送到自己的私有仓库,镜像名称必须满足私有仓库的要求:registry_url:port/ImageName:tag
    •  设置本地docker服务支持http:修改docker配置文件:/etc/docker/daemon.json,在json中增加内容"insecure-registries": ["192.168.100.64:5000"]
  • dockerBuild:镜像存入当前镜像仓库,
  • buildTar:镜像生成tar文件,保存在项目的target目录下,在任何docker环境执行 docker load < jib-image.tar即可导入到本地镜像仓库
    •   dockerBuild和buildTar打包的前提是本地需要安装docker,看了好多博客都没有提到这点,导致打包一直报错
  • 将jib打包与mvn构建的生命周期绑定
<!--将插件绑定在某个phase执行--> <executions> <execution> <id>build-image</id> <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build--> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> 
  1. 镜像生成时间:<useCurrentTimestamp>标签,可以设置镜像的创建时间,但是2.3.0版本的插件是没有这个参数的,要不然就报错了,亲测

2.3 验证测试

2.3.1 个人私有仓库是否存在?

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

2.3.2 私有仓库pull镜像

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

2.3.3 启动

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

2.3.3 测试:curl localhost:8098

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

2、docker-maven-plugin实现方式

2.1 搭建springboot项目

搭建过程在此不过多演示,如果想自己尝试,或者查看我的源码,可以去我的仓库下载:springboot-docker

2.2 编写pom.xml配置

<!--docker-maven-plugin插件--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <!--将插件绑定在某个phase执行--> <executions> <execution> <id>build-image</id> <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build--> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--指定生成的镜像名--> <imageName>dangbo/${project.name}</imageName> <!--指定tag标签--> <imageTags> <imageTag>latest</imageTag> </imageTags> <!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下--> <dockerDirectory>${project.basedir}</dockerDirectory> <!--指定远程 docker api地址--> <dockerHost>http://192.168.100.64:2375</dockerHost> <!-- 这里是复制 jar 包到 docker 容器指定目录配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar 包所在的路径 此处配置的 即对应 target 目录--> <directory>${project.build.directory}</directory> <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> <!-- 以下两行是为了docker push到DockerHub使用的。 --> <!--<serverId>docker-hub</serverId>--> <!--<registryUrl>https://index.docker.io/v1</registryUrl>--> </configuration> </plugin> 

2.3 编写Dockerfile文件

# 项目所依赖的镜像 FROM java:8 # 将maven构建好的jar添加到镜像中 ADD target/*.jar app.jar # 暴露的端口号,用于标记信息,和容器内程序保持一致,使运维人员知道容器都要暴露哪些端口 EXPOSE 31945 # 镜像所执行的命令 ENTRYPOINT ["java","-jar","/app.jar"] 

✌️ 注意点✌️

  1. docker需要开启2375端口,提供外部访问docker:修改docker配置文件并重启
  • 配置文件:/lib/systemd/system/docker.service
  • 重启命令:systemctl restart docker
  • 命令:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

2.4 打包镜像

由于将插件绑定在mvn package上,直接执行命令即可:mvn clean package -Dmaven.test.skip=true

2.5 验证测试

2.5.1 查看镜像是否存在

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

2.5.2 启动
【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

2.5.3 测试接口

【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

本次分享就到此结束,如果有不对的地方,请大家评论区留言,谢谢!!!

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin》
文章链接:https://www.456zj.com/38229.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址