【CI/CD技术专题】「Docker实战系列」使用Maven插件构建Docker镜像的方法

本文介绍了运用Maven插件构建Docker镜像的办法,共享给咱们,具体如下:

东西

工欲善其事,必先利其器。笔者经过调研,有以下几款Docker的Maven插件进入笔者视界。

插件称谓+官方地址

  • docker-maven-plugin github.com/spotify/doc…

  • docker-maven-plugin github.com/fabric8io/d…

  • docker-maven-plugin github.com/bibryam/doc…

Java改宿java怎样读主机装备(d服务器配置ocker能够长途拜访)

  • 修改宿主机的docker装备,让其支撑长途拜访。
vi /usr/lappearib/systemd/system/docker.service

打开docker长途API,修改docker安全教育渠道装备文件 docker.service进入修改模式后。

ExecStart=后增加装备-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sapplicationock

保存后退出,从头加载装备文件#安全期计算器systemctl daemon-reload ,发起docker #systemctl start docker 。

  • 刷新装备,从头服务变量是什么意思
systemctl daemon-reload
systemctl restarjava工作培训班t docker

装备 DOCKER_HOST

docker-maven-plugin 插件默许联接本地 Dock变量泵er 地址为:localhost:2375,所以咱们需求先设置下环境变量

DOCKER_HOST=tcp://<服务器租借多少钱一年hostjava模拟器>:2375

留神:假定没有设置 DOCKER_HOST 环境变量,能够指令行闪变量名现指定服务器操作体系银河麒麟 DOCKER_变量名HOST 来实施,如我本机指定 DOCKER_HOST:DOCKER_HOST=tcp://:2375

例如

  • ExecS服务器怎样建立tart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ,这儿就写4个0,你可别改成自变量是什么意思己的ip哦,安全出产法

  • 输入#netstat -anp|grep 2375 闪现docker正在监听2375端口,输入#curl 127.0.0.1:2375/info 闪现一大堆信息,证明长途api就弄好了

  • 在windows体系环境变量中新建DOCKER_HOST,值为tcp安全期是哪几天://10.100.74.220:2375,appstore(你改成你自己的docker服务器ip地址)

【CI/CD技能专题】「Docker实战系列」运用Maven插件构建Docker镜像的办法

运用安全教育渠道插件构建Dock安全er镜像

在咱们继续集成进程中,项目工程一般运用 Maven 编译打包,然后生成镜像,经过镜像上线,能够大大供应上线功率,一同能够快速动态扩容,快速回滚,着实很便当。docker-maven-plugin 插件便是为了帮助咱们在Maven工程中,经过简略的装备,自动生成镜像并推送到仓库中

增加插件

在pom.xml中增加下面这段:

 <build>
增加相关的镜像插件
</build>

构建镜像

构建镜像能够运用一下两种办法,第一种是将构建信息指定到 POM 中application,第二种是运用已存在的 Dockerfile 构建。(支撑将 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息装备在 POM 中,不需求运用 Dockerfile 装备。)

  • java工作培训班首种办法,支撑将 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息装备在 POM 中,不需求运用 Dockerfile 装备

  • 第二种办法,假定运用 VOLUME 或其他 Dockerfile 中的指令的时分,需求创立一个 Dockerfile,并APP在 POM 中装备 dockerDirectory 来指定途径即可。(创立一服务器和电脑主机的差异个 Dockerfile,并在 POM 中装备 dockerDirectory 来指定途径即可)

增加docker-maven-plugin
<plugin>
&ltjava模拟器;groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13服务器体系</versi服务器ipon>
<configuration变量名的命名规矩>
<服务器地址在哪里看docker服务器地址在哪里看Directory>${project.basedir}/src/main/docker</dockerDirectory>
<imageName>{dockerhub称谓/imageName}</imaapplegeName>
<imageTags>
<imageTag>{imageAPPTag}</imageTappointmentag>
</imageTags>
<baseImage>{baseImag服务器租借多少钱一年e}</baseImage>
<entryPoint>{end[point]}&java言语lt;/entryPoint>
<maintainer>author author@email服务器.com</maintainer>
<workjava工作培训班dir>/ROOT</workdir>
<resources>
<resource>
<targetPath>/</targetP服务器地址在哪里看ath>
<安全directory>${project.build.directory}</directory>
<include>${安全教育渠道登录project.bu变量名ild.finalName}.jar&java怎样读lt;/include>变量之间的联系
</re变量名source>
</resources>
</configuration>
</plugin>
  • {dockerhub称谓/imageName}:

    • dockerhub称谓:对应DockerHub用户名,,必定要是契合正则[a-z0-9-_.]的,变量名否则服务器构建不会成功

    • imageName:对应 DockerHub 仓库名,必定要是契合正则[java难学吗a-z0-9-_.变量泵]的,否则构建不会成功

    • 能够直接指定:project.groupId/变量是什么意思{project.groupId}/{project.artifactId}

  • {app是什么意思imageTag}:镜像标签,相当于标签或许版本,latest。

  • {baseImage}: 指定服务器地址在哪里看基础apple镜像,平等 FROM 指令,例如:java,当然能够不必,直接在d变量是什么意思ockerfile文件安全期是哪几天中生成。

  • {endpoint}:// 平等于 ENTRYPOINT 指令,例如: [“java”,”-jar”,”app.jar”]

这儿是复制 jar 包到 dockerjavaapi中文在线看 容器指定目录装备,也能够写到 Dockerfile中

  • {project.build.directory}:指定要复制的根目录,${pro变量类型有哪些ject.build.directory} 标明 target 目录。

  • {papproachroject.build.finalName}:指定要复制的文件,${project.build.finalName}.jar 指打包后的 jar 文件。

  • resources.re安全教育渠道登录进口source.targe安全出产法tPath:将打包后的资源文件复制到该目录;

  • resources.r安全出产法esource.directory:需求复制的文件地址目录,maven打包的运java工作培训班用jar包保存在target目录下面;

  • resources.resource.include:需求复制的文件,打包好的运用jar包。

读取 Dockerfile 文件就不必指定 baseImage 和 entrypoint

  • 指定要安全期计算器读取的Docke安全教育渠道登录rfile文件:
<dockerDirectory>${project.basedir}/src/main/docker</dockerDiappreciaterectory>

创立Dockerfile

srcmaindocker

【CI/CD技能专题】「Docker实战系列」运用Maven插件构建Docker镜像的办法

内容如下
FROM java:8
VOLUME /tmp
ADD admin-servic变量的指针其意义是指该变量的e-80-0.0.1-SNAPSHOT.jar admin-service-80.jar
RUN bash -c 'touch /admin-service-80.jar'
EXPOSE 80
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar",安全工程"${服务器地址在哪里看project.builjava难学吗d.finalName}.jar"]
实施以下指令构建 Docker 镜像

mvn clean package docker:build

[INFO] --- docker-maven-服务器plugin:1.0.0:build (defa服务器地址在哪里看ult-cli) @ mavenDemo ---
[INFO] Builappointmentding image mavendemo
Step 1/服务器地址在哪里看5 : FROM java
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER docker_maven docker_maven@email.com
---> Using cache
---> 2faf180d4a50
Step 3/5 : WORKDIR /ROOT
---> Using cache
---> 862210f7956a
Step 4/5 : ENTRYPOINT java -jar mavenDemo.jar
---> Running inJava 96bbe83de6ec
---> c29009c88993
R变量是什么意思emoving in变量泵termediate conjava模拟器tainer 96bbe83dejavaapi中文在线看6ec
Step 5/5 : CMD java -version
---> Running in f69b8d2a75b1
---> bc8d54014325
Removing inter服务器me安全教育渠道登录进口diate container f69b8d2a75b1
Successfully built bc8d54014325

【CI/CD技能专题】「Docker实战系列」运用Maven插件构建Docker镜像的办法

实施 docker im变量的指针其意义是指该变量的ages 查看服务器怎样建立方才构建的镜像

实施指令

  • mvn clean package docker:build:只实施 build 操作
  • mvn clean package docker:build -DpushImage 实施 build 完毕后 push 镜像
  • mvn clean package docker:build -DpushImageTag 实施 bui服务器操作体系银河麒麟ld 并 push 指定 tag 的镜像

留神:这儿有必要指定至少一个 imageTag,它能够装备到POM 中,也能够在指令行指定

指令行指定如下:

m变量值vn clean package docker:bui服务器ld -Djavaapi中文在线看pushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2,POM 文件中指定装备如变量是什么意思下:

<b安全教育渠道登录uild>
<pluginjavaapi中文在线看s>
...
<plugin>
<conapplefiguration>
...
<imageTags>
<imageTag>imageTag_1</imageTag>
&lt服务器ip;imageTag>imageTag_2</imageTag>
</imageTjava面试题ags>
</configuratio变量名的命名规矩n>
</plugijava初学n>
...
</plugins>
</build>

绑定Docker 指令到 Maven 各个阶段

  • 能够绑定服务器操作体系银河麒麟 Docker 指令到 Maven 各个阶段,咱们能够把 Docker 分为 build、tagjavaee、push,然后分别绑定 Maven 的 package、deploy 阶段。

  • 只需求实施mvn deploy就能够完毕整个 buil安全工程d、tag、push操作了,当咱们实施mvn bjavaeeuild就只完毕 build、tag 操作

  • 除此此外,当java言语咱们想越过某些进程或许只实施某个进程时变量的定义,不需求修改 POM 文件,只需求指定越过 docker 某个进程即可。比方当咱们工程现已装备好了自动化模板了,可是这次咱们只需求打镜像到本地自测。

  • 不想实施安全出产法 push 阶段,那么此时实施要指定参数-DskipDockerPush就可越过 push 操作了。

以上示例,当咱们实施mvn package时,实施 build、tagapp下载 操作,当实施mvn deploy时,实施build、tag、push 操作。假定咱们想越过服务器ip docker 某个进程时,只需求:

  • -D变量类型有哪些skipDockerBuild 越过安全工程专业 build 镜像
  • -DskipDockerTag 越过 tag 镜像
  • -DskipDockerPush 越过 push 镜像
  • -DskipDocker 越过整个阶段

例如:咱们想实施 package 时,越过 tag 进程,那么就需求mvn pa变量是什么意思ckage -DskipDockerTag。

<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-p安全教育渠道lugin</artifactId>
<v服务器租借多少钱一年ersion>1.0.0</version>
<configuration>
<imageName>mavendemo</变量名imageName>
<baseIm安全出产法age>java</baseImage>
<maintainer>docker_maven docker_maven@ema变量值il.com</maint变量的指针其意义是指该变量的ainer>
&APPlt;workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPo安全期是哪几天int>["服务器租借java", "-jar", "${project.build.finappreciatealName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/ROOT&安全教育渠道登录lt;/targetPath>
&ltjavascript;directory>${project.build.d变量之间的联系irectory}</directory>
<include>${project.build.finalName}安全教育.jar&java怎样读lt;/include>
</resource>
&l安全期计算器t;/resources>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase&java难学吗gt;package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
&java工作培训班lt;execution>
<id>tag-image</id>
<ph服务器体系ase>package</phase>
<goals>
<goal>tag&l变量值t;/goal&appetitegt;
<APP/goals>
&lt服务器;configuration>
<image>mavendemo:latest</image>
<newName>djava怎样读ocker.io/wanyang3/maven变量名demo:${project.version}</ne安全期计算器wName>
</configuration>
</exe安全出产法cution>
<execution>
<id>push-image&ltapproach;/id>
<phjava工作培训班ase>dep变量名的命名规矩loy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>dockapproacher.io/waappreciatenyang3/m服务器怎样建立avendemo:${project.version}</imageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
&lt安全教育渠道登录进口;/build>

doc变量ker-maven-pl安全教育渠道登录ugin 插件还供应了许多很有用的装备,稍微列举几个参数吧。
【CI/CD技能专题】「Docker实战系列」运用Maven插件构建Docker镜像的办法

安全认证装备

当咱们 push 镜像到 Docker 仓库中时,不管是共有仍是私有,经常会需求安全认证,登录完毕之后才能够进行操作。当然,咱们能够经过指令行 docker login -u user_name -p password docker_registry_host 登录,可是关于自动化流程来说,就不是安全工程很便当了。运用 docker服务器租借-maven-pappetitelugin 插件我安全期计算器们能够很简单结束安全认证

首先在 Maven 的装备文件 setting.xml 中增加javaapi中文在线看相关 server 装备,首要装备 Docker registry用户认证信息

<servers>
<serve服务器配置r>
<idjavaee>my-docker-registry</id>
<username>wanyang3</username>
<password>12345678</password>
<configuration>
<email>wanyang3@mail.com</e安全出产法mail>
</configuration>
</servapplicationer>
</servers安全教育渠道>

然后只需求在 pom.xml 中运用 server id 即安全教育渠道登录进口可。

&applelt;plugin>
<plugin>
<groupId>com.安全spotify</groupId>
<artifactId>docker-maven-plugin</artifaJavactId>
<version>1.0.0</version>
<configuration>
<imageName>registry.example.com/wanyang3/mav服务器endemo:v1.0.0</imageName>
...
<serverId>my-docker-registry</appointmentserverId>
<安全/configuration>
</plugin>

运用私有Docker仓库地址

实践工作环境中,咱们需求 push 镜像到咱们私有 Docker 仓库中,运用d ocker-maven-plugin 插件咱们也是很简单结束,有几种办法结束

修改 POM 文件 imageName 操作

<confi变量名的命名规矩guration>
&ltjava模拟器;imageNa服务器和电脑主机的差异me>{privateImageHubUrl}/i变量的定义mageNamapp是什么意思e/tag</ima安全教育渠道登录进口geName>
...
</config变量值uration>

以以上的格局进行输出即可。

修改 POM服务器租借 文件中 newName 操作

<configuration>
<imageName>mavjava初学endem服务器地址在哪里看o</imag变量是什么意思eName>
...
</configu变量与函数ration>
<execution变量的指针其意义是指该变量的>
<id>tag-ijava难学吗mage</id>
<phase>package<安全期是哪几天/phase>
<goals>
<approachgoal>tag</goal&g变量泵t;
</goals>
<configuration>
<image>mavenapp是什么意思demo</image>
<newName>{privjava言语at服务器地址在哪里看eImageHubUrl}/imageName/tag</newName>
</configuration&applegt;
</execution>

从头发起Docker服务

systemctl stop docker
systemctl start docker

打开防火墙的Docker构建端口

firewa安全ll-cmd –zone=pjava面试题ublic –add-port=2375/tcp –permanentfirewall-cmd –reload

发表评论

提供最优质的资源集合

立即查看 了解详情