随着的微服务架构的流行,spring推出springboot框架作为回应,而部署一个个微服务,我们就不能再使用传统的在linux上部署,而是转移到docker上.
本次介绍最简单高效的方式,使用Maven插件,我使用的是阿里云的CentOS7
首先在pom.xml文件中添加如下的插件
<!-- docker maven打包插件;可以将应用做成docker镜像 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<dockerCertPath>docker</dockerCertPath>
<!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
<!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed-->
<imageName>spring-boot-demo</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
并添加端口号远程的端口,因为不设置默认为本机的
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<dockerHost>http://xxx.xxx.xxx.xxx:2375</dockerHost>
</properties>
由于远程的docker默认端口是没有打开的 配置端口号2375
使用
vi /usr/lib/systemd/system/docker.service
进入docker.service文件
添加如下的内容
-H unix:///var/run/docker.sock -H 0.0.0.0:2375 \
使用 netstat -an |grep 2375 可以查看2375端口号是否打开
在window本机配置环境变量
DOCKER_HOST tcp://xxx.xxx.xxx.xxx:2375
由于我使用的是阿里云CemtOS7 服务器 还需要设置一下安全组中开启2375端口
这里有个坑,我以为把防火墙关了,就可以了,其实不然,这时候反而需要开启防火墙
运行如下脚本开启2375端口号
firewall-cmd --zone=public --add-port=2375/tcp --permanent
重启防火墙:
firewall-cmd --reload
或者service firewalld restart
我觉得把防火墙开了上传一下镜像再关闭也行,不然就连接不上mysql,redis等,这时候又要开启很多端口
最好再使用window的 telnet命令 telnet xxx.xxx.xxx.xxx 2375
测试一下
注意window默认不开启telnet命令的,需要开启,大家可以百度一下就会了,这不是重点
以上一切顺利的话
再按顺序执行maven命令
1 clean
2.package
3.docker:build
即可
倘若成功,使用docker images 可以查看到上传的镜像
spring-boot-demo latest be50b1f2d950 40 minutes ago 658 MB
再使用
docker run -itd --name damo01 -p 9091:9090 be50b1f2d950
我的springboot项目设置端口为9090 使用9091映射
这里如果端口映射网络出了问题,再运行一下下面的命令即可
pkill docker #终止进程
iptables -t nat -F #清空nat表的所有链
ifconfig docker0 down #停止docker默认网桥
systemctl restart docker #重启docker
接着,访问项目Restful接口
xxx.xxx.xxx.xxx:9091/test
这时终于成功了,不容易,所有的坑我都踩了一遍,按照我上面的说的做,基本不会有差错