300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Docker之使用maven插件【Dockerfile方式】构建并推送镜像到私有仓库

Docker之使用maven插件【Dockerfile方式】构建并推送镜像到私有仓库

时间:2024-01-04 08:51:51

相关推荐

Docker之使用maven插件【Dockerfile方式】构建并推送镜像到私有仓库

准备工作

操作系统版本

[root@node02 ~]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)

docker版本

[root@node02 ~]# docker -vDocker version 18.06.3-ce, build d7080c1

接上一篇: 【Docker之使用maven插件【配置方式】构建并推送镜像到私有仓库】 ,这次我们通过 maven 插件和Dockerfile混合方式来生成镜像并推送到私有仓库

本文内容和上一篇只有以下几个地方不一样,前提是你的docker私有仓库搭建好了,并且开启了api服务,可以参考: 【Docker之用docker-compose安装registry和docker-registry-web私有仓库和仓库前端】

在自己项目里新建一个 Dockerfile文件,可以放在自定义的目录里:

编辑maven pom文件,我们使用 docker-maven-plugin,和上一篇区别在添加了 dockerDirectory 标签指定了Dockerfile的路径,并且配置相关的只保留 resources 标签,私有仓库相关的不变;

<plugin><!--docker-maven-plugin start--><groupId>com.spotify</groupId><!--文档参考 /spotify/docker-maven-plugin --><artifactId>docker-maven-plugin</artifactId><version>1.1.0</version><configuration><!--============================================仓库相关配置================================================--><!--私有仓库地址--><registryUrl>192.168.126.99:5000</registryUrl><!--docker api地址构建镜像是通过调用在 http://192.168.126.99:2375 上的api构建image,以便后续推送到registryUrl上;如果本地开启了docker api,这个地方也可以填本地的docker api地址--><dockerHost>http://192.168.126.99:2375</dockerHost><!--是否推送镜像--><pushImage>true</pushImage><!--推送后是否覆盖已存在的标签镜像--><forceTags>true</forceTags><!--=============================================构建相关配置===============================================--><!--镜像名称--><imageName>192.168.126.99:5000/${project.artifactId}:${project.version}</imageName><!--To use a Dockerfile, you must specify the dockerDirectory element.If specified, the baseImage, maintainer, cmd and entryPoint elements will be ignored.The contents of the dockerDirectory will be copied into ${project.build.directory}/docker.Use the resources element to copy additional files, such as the service's jar file.--><dockerDirectory>${project.basedir}/docker_file</dockerDirectory><!--插件会将需要的资源拷贝到 docker目录下,供Dockerfile里构建镜像使用--><resources><resource><targetPath>/${app.dir}</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include><include>classes/application.yaml</include></resource></resources></configuration><!--docker-maven-plugin end--></plugin>

Dockerfile 内容:

FROM openjdk:8-jreCOPY /app/tailf-web-1.2.1-SNAPSHOT.jar /app/tailf-web-1.2.1-SNAPSHOT.jarCOPY /app/classes/application.yaml /app/log/WORKDIR /appCMD ["java", "-jar", "/app/tailf-web-1.2.1-SNAPSHOT.jar"]

原理

docker-maven-plugin插件在配置dockerDirectory后会忽略掉pom里的baseImage, maintainer, cmd and entryPoint配置,我们可以使用 resources 标签准备构建镜像的文件;

其大致流程:

1、resources标签指定的资源会被复制到编译路径下的docker目录里

2、根据Dockerfile定义,调用docker api即 dockerHost 标签配置的服务器构建镜像(可以设置成本地,如果本地有docker服务并开启了docker api)

3、docker api所在的服务器构建镜像完毕,将镜像推送到私有仓库

构建推送:clean - build - docker:build

日志:

分析

Dockerfile方式比pom里配置的方式相比,个人觉得更喜欢Dockerfile方式

文档

1、docker-maven-plugin文档

【spotify/docker-maven-plugin】 /spotify/docker-maven-plugin

2、代码上传到了 【码云】 ,可点击查看

over~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。