1、使用Maven插件构建Docker镜像
1.1、在pom.xml中添加Docker配置
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<!--将docker插件绑定到某个phase执行-->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>test-repository/${project.artifactId}:${project.version}</imageName>
<dockerHost>http://${dockerHost}:2375</dockerHost>
<!--覆盖构建相同标签的镜像-->
<forceTags>true</forceTags>
<!--dockerfile的位置-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--jar名称配置,用在dockerfile中,需要自己写的可不用此配置-->
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<!--jar源位置-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 1.4.2 与maven配置文件settings.xml中配置的server.id一致,用于推送镜像 -->
<serverId>docker-hub</serverId>
</configuration>
</plugin>
</plugins>
</build>
(1)imageName:用于指定镜像名称,其中test-repository是仓库名称,${project.artifactId}是镜像名称,${project.version}是标签名称。
(2)resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录。
(3)resources.resource.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。
1.2 执行命令,构建docker镜像
mvn clean package docker:build
1.3 将插件绑定在某个phase执行
很多情况下,有这样的需求,例如执行mvn clean package时,插件自动构建docker镜像。想要实现这点,只需将插件的goal绑定在某个phase。
命令格式:mvn phase:goal
例如:mvn package docker:build
那么package和docker都是phase,build是goal。
则需要添加如下配置:
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
1.4 使用Maven推送镜像
1.4.1、修改maven的全局配置文件settings.xml。配置docker hub的用户信息。
<server>
<id>docker-hub</id>
<username>你的DockerHub用户名</username>
<password>你的DockerHub密码</password>
<configuration>
<email>你的DockerHub邮箱</email>
</configuration>
</server>
1.4.2、修改pom.xml
如上注释
1.4.3、执行命令,添加pushImage的标识,标识推送镜像
mvn clean package docker:build -DpushImage
1.5、项目中配置Dockerfile
根据上面的<dockerDirectory>标签配置的地址添加
Dockerfile配置如下:
# 该镜像需要依赖的基础镜像
FROM java:8
ARG JAR_FILE
# 复制打包完成后的jar文件到/opt目录下
COPY ${JAR_FILE} /test-1.0-SNAPSHOT.jar
# 运行过程中创建一个test-1.0-SNAPSHOT.jar文件
RUN bash -c 'touch /test-1.0-SNAPSHOT.jar'
# 声明服务运行在2020端口
EXPOSE 2020
ENV JAVA_OPTS="-Xms256m -Xmx512m"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /test-1.0-SNAPSHOT.jar" ]
2、Jenkins构建Maven项目
2.1、创建一个任务
1)新建Item
2)创建项目
2.2项目配置
2.2.1、配置丢弃旧的构建。根据需要配置
2.2.2、配置Git
配置能拉取到分支的账号,注意git用户权限
2.2.3、配置构建镜像
DdockerHost与pom中<dockerHost>对应
2.2.4、配置运行脚本
服务器信息在首页——》系统管理——》系统配置——》SSH remote hosts节点,可配置多台
最终结果