在使用idea开发时,直接docker-maven-plugin插件,把项目编译成docker镜像,然后通过docker:push推送到linux服务器,非常简单,快捷,也避免了手动打包,然后拷贝war包到tomcat的麻烦了。以下是流程:

1、先配置docker-maven-plugin插件

docker maven install速度慢 docker maven插件_maven

在pom文件中加入docker-maven-plugin插件相关配置

docker maven install速度慢 docker maven插件_jar_02

绑定docker命令到maven各阶段

docker maven install速度慢 docker maven插件_maven_03

这里需要服务器开启2375端口,后面详细描述

具体代码:

<!--docker 插件-->
<docker.repostory>hub.*****.com</docker.repostory>
<docker.registry.name>****</docker.registry.name>
<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>docker-maven-plugin</artifactId>
	<version>0.4.14</version>
	<configuration>
		<serverId>my-hub</serverId>
		<registryUrl>http://${docker.repostory}</registryUrl>
		<!--<pushImage>true</pushImage>-->
		<imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName>
		<imageTags>
			<imageTag>${project.version}</imageTag>
			<imageTag>latest</imageTag>
		</imageTags>
		<dockerHost>http://192.168.*.*:2375</dockerHost>
		<baseImage>daocloud.io/library/java:openjdk-8u40</baseImage>
		<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
		<exposes>
			<expose>8080</expose>
		</exposes>
		<resources>
			<resource>
				<targetPath>/</targetPath>
				<directory>${project.build.directory}</directory>
				<include>${project.build.finalName}.jar</include>
			</resource>
		</resources>
	</configuration>
	<!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
</plugin>
</plugins>

2、配置docker-wagon-plugin插件(非本次方式必须,可以安装,是另外一种部署方式,直接通过wagon命令,直接把jar包推到服务器,然后替换)

docker maven install速度慢 docker maven插件_maven_04

docker maven install速度慢 docker maven插件_maven_05

docker maven install速度慢 docker maven插件_docker_06

具体代码:

<!--wagon plugin 配置-->
<service-path>/work/${project.artifactId}</service-path>
<pack-name>${project.artifactId}.jar</pack-name>
<remote-addr>192.168.*.*:*</remote-addr>
<remote-username>root</remote-username>
<remote-passwd>****</remote-passwd>
<extensions>
	<extension>
		<groupId>org.apache.maven.wagon</groupId>
		<artifactId>wagon-ssh</artifactId>
		<version>2.8</version>
	</extension>
</extensions>
<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>wagon-maven-plugin</artifactId>
	<version>1.0</version>
	<configuration>
		<fromFile>target/${pack-name}</fromFile>
		<url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url>
		<commands>
			<!-- Kill Old Process -->
			<command>kill -9 `ps -ef |grep ${project.artifactId}.jar|grep -v "grep" |awk '{print $2}'`</command>
			<!-- Restart jar package,write result into renren.log -->
			<command><![CDATA[nohup java -jar ${service-path}/${pack-name} --spring.profiles.active=test > ${service-path}/renren.log 2>&1 & ]]></command>
			<command><![CDATA[netstat -nptl]]></command>
			<command><![CDATA[ps -ef | grep java | grep -v grep]]></command>
		</commands>
		<!-- 运行命令 mvn clean package wagon:upload-single wagon:sshexec-->
		<displayCommandOutputs>true</displayCommandOutputs>
	</configuration>
</plugin>

3、完了后,可以在maven-project看到docker插件和wagon插件

docker maven install速度慢 docker maven插件_docker_07

docker maven install速度慢 docker maven插件_docker_08

4、需要在上面配置的Linux服务器,通过docker开启2375端口,提供外部访问docker

编辑docker文件:/usr/lib/systemd/system/docker.service

vim /usr/lib/systemd/system/docker.service

修改ExecStart行为下面内容

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

docker maven install速度慢 docker maven插件_docker_09

重新加载docker配置

systemctl daemon-reload // 1,加载docker守护线程
systemctl restart docker // 2,重启docker

5、关闭防火墙

ss -luntp
systemctl status firewalld
systemctl  stop firewalld
systemctl  disable  firewalld

docker maven install速度慢 docker maven插件_maven_10

如果开放成功,访问2375端口,会看到如下效果:

docker maven install速度慢 docker maven插件_jar_11

6、安全认证配置

当我们 push 镜像到 Docker 仓库中时,不管是共有还是私有,经常会需要安全认证,登录完成之后才可以进行操作。当然,我们可以通过命令行

docker login -u user_name -p password docker_registry_host

登录,但是对于自动化流程来说,就不是很方便了。使用 docker-maven-plugin 插件我们可以很容易实现安全认证。 首先在 Maven 的配置文件 setting.xml 中增加相关 server 配置,主要配置 Docker registry用户认证信息。

路径:

docker maven install速度慢 docker maven插件_jar_12

docker maven install速度慢 docker maven插件_maven_13

<servers>
	<server>
		<id>my-hub</id>
		<username>**</username>
		<password>***</password>
		<configuration>
			<email>***@163.com</email>
		</configuration>
	</server>

 

7、测试、验证

先配置镜像images版本c-0311

docker maven install速度慢 docker maven插件_docker_14

docker maven install速度慢 docker maven插件_maven_15

执行完第一步,控制台看到日志,正在构建、打包jar

docker maven install速度慢 docker maven插件_docker_16

接下来,执行第二步,镜像生成完成,且推到了内网了

docker maven install速度慢 docker maven插件_docker_17

接下来,去内网看下c-0311版本的镜像已存在,则测试成功了!

docker maven install速度慢 docker maven插件_maven_18

 

8、相关报错,以及解决办法:

docker pull 的时候报错 Get https://hub.xxx.com/v1/_ping: dial tcp 192.168.1.8:443: getsockopt: connection refused
内网搭建自己的docker 仓库时遇到这个问题,原因是docker 默认不支持http的registry ,
vim /etc/docker/daemon.json   添加 { "insecure-registries":["hub.***.com"] }
 
hub.***.com    这是私有docker仓库域名,与前面配置匹配

重启 docker 
systemctl restart docker.service