maven项目docker插件自动部署——jar包

本文例子地址:https://github.com/wangfei0904306/yeepay

本文使用插件:io.fabric3 的 docker-maven-plugin 插件

maven项目自动部署到docker,主要有根POM文件和Assembly两块配置,如图:


一、POM文件配置

<build>
		<finalName>${project.artifactId}</finalName>  <!--这里一定要定义生成的JAR包文件名-->
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<!--Docker 插件-->
			<!-- 构建镜像:       mvn docker:build -->
			<!-- 启动镜像:       mvn docker:start -->
			<!-- 停止镜像:       mvn docker:stop  -->
			<!-- 删除镜像:       mvn -Ddocker.removeAll docker:remove  -->
			<!-- 查看镜像日志:    mvn docker:logs -->
			<!-- 镜像启动成功后,访问地址为: http://192.168.1.70:8881/ams-server -->
			<plugin>
				<groupId>io.fabric8</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>0.20.0</version>
				<extensions>true</extensions>
				<configuration>
					<dockerHost>http://192.168.0.54:2735</dockerHost>
					<images>
						<image>
							<name>iciyun/${project.artifactId}</name> <!--生成的image名-->
							<alias>${project.artifactId}</alias>
							<build>
								<from>java:8u40</from>
								<maintainer>john.doe@example.com</maintainer>
								<tags>
									<tag>latest</tag>
									<tag>${project.version}</tag>
								</tags>
								<ports>
									<port>8080</port>
								</ports>
								<volumes>
									<volume>/usr/src/myapp</volume>
								</volumes>
								<buildOptions>
									<shmsize>2147483648</shmsize>
								</buildOptions>

								<entryPoint>
									<!-- exec form for ENTRYPOINT -->
									<exec>
										<arg>java</arg>
										<arg>-jar</arg>  <!--启动参数-->
										<arg>/usr/src/myapp/${project.artifactId}.jar</arg>
									</exec>
								</entryPoint>

								<assembly>
									<mode>dir</mode>
									<basedir>/</basedir>
									<descriptor>assembly.xml</descriptor>
								</assembly>
							</build>
							<run>
								<namingStrategy>alias</namingStrategy>  <!--container全名规则-->
								<ports>
									<port>0.0.0.0:5555:8080</port> <!--端口映射-->
								</ports>
							</run>
						</image>
					</images>
				</configuration>
				<executions>
					<!-- 以下为插件与Maven声明周期做绑定,可选择使用 -->
					<!--<execution>-->
					<!--<id>build-docker-image</id>-->
					<!--<phase>package</phase>-->
					<!--<goals>-->
					<!--<goal>build</goal>-->
					<!--</goals>-->
					<!--</execution>-->
					<!--<execution>-->
					<!--<id>push-docker-image-to-registry</id>-->
					<!--<phase>deploy-goho</phase>-->
					<!--<goals>-->
					<!--<goal>push</goal>-->
					<!--</goals>-->
					<!--</execution>-->
				</executions>
			</plugin>

		</plugins>
	</build>

二、Assembly配置

注意Assembly.xml文件位置为上图中所示位置

Assembly.xml文件内容:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>${project.artifactId}</id>
    <files>
        <file>
            <source>target/${project.artifactId}.jar</source>
            <outputDirectory>/usr/src/myapp</outputDirectory>
            <destName>${project.artifactId}.jar</destName>
        </file>
    </files>
</assembly>

三、构建命令

mvn -f /var/lib/jenkins/workspace/springboot-docker-demo/pom.xml docker:stop -Ddocker.removeAll docker:remove docker:build docker:start
其中“/var/lib/jenkins/workspace/springboot-docker-demo/pom.xml”为POM文件的绝对位置

四、注意事项

Ubuntu中完美运行,CentOS中需要做额外处理,每次要先删掉原有的容器和镜像,类似处理命令如下:

docker stop unipay    1>/dev/null 2>&1 | exit 0
docker rm -f unipay    1>/dev/null 2>&1 | exit 0
docker rmi -f iciyun/unipay:0.0.1-SNAPSHOT    1>/dev/null 2>&1 | exit 0
docker rmi -f iciyun/unipay:latest    1>/dev/null 2>&1 | exit 0

深入学习的朋友: https://dmp.fabric8.io/#docker:build



版权声明:本文为wangfei0904306原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。