怎么部署 Spring Boot?打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过这些都过时了,容器化部署应该是目前的主流方案。
如何将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目,今天我们就来了解一下,真的很秀哦。
yum install vim -y
daemon.json
的配置:vim /etc/docker/daemon.json
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
{
"":"", // 如果这里有其他配置,记住逗号不能忘,json字符串格式配置
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
然后让docker重新读取配置文件,并重启docker服务:
systemctl daemon-reload
systemctl restart docker
添加指定需要开放的端口:
firewall-cmd --zone=public --add-port=2375/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
查询指定端口是否开启成功:
firewall-cmd --query-port=2375/tcp
curl http://127.0.0.1:2375/info
高版本的IDEA默认给我们安装了Docker了。
如果是低版本的IDEA,可以点击 File->Settings->Plugins->Browse Repositories 搜索docker安装。
配置docker,连接docker服务。
输入IP+端口,测试连接成功,确定应用之后,自动弹出Docker框:
也就是在IDEA的sevice任务栏里面可以看到。
测试一下:
之前的容器,因为重启了docker之后,已经停掉了,那么用以前的启动方式,需要:
docker ps -a
// 然后
docker start 容器ID
docker-maven-plugin插件:
<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>1.0.0version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}imageName>
<imageTags>
<imageTag>latestimageTag>
imageTags>
<baseImage>javabaseImage>
<maintainer>[email protected]maintainer>
<workdir>/ROOTworkdir>
<cmd>["java", "-version"]cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]entryPoint>
<dockerHost>http://192.168.31.6:2375dockerHost>
<resources>
<resource>
<targetPath>/ROOTtargetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>
执行命令打包:
mvn clean package docker:build
docker images
-p 是做端口映射,此时将服务器中的8080端口映射到容器中的8081(项目中端口配置的是8081)端口
Container name: 也可以指定容器名称,也可以不指定
访问测试:
http://192.168.31.6:8080/list
当执行mvn package的时候:执行mvn clean package docker:build,也就是先clean一下maven,然后再build打包,免去我们手动clean的操作。
<executions>
<execution>
<id>build-imageid>
<phase>packagephase>
<goals>
<goal>buildgoal>
goals>
execution>
executions>
重新执行mvn clean package docker:build
使用mvn package打包构建docker镜像成功后:
docker build或者docker pull的时候,由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为none的镜像。这类无标签镜像也被称为虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
docker images -f dangling=true
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker rmi $(docker images -q -f dangling=true)
浏览器无法访问网页、2375和8080端口没有对外开放。
2、检查端口号是否开放
telnet xxx 端口号
如果出现如上窗口,证明端口已经开放。
如果端口未开放,解决方案:
查询指定端口是否已开:
firewall-cmd --query-port=8080/tcp
提示 yes,表示开启;no表示未开启。
开启防火墙:
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
添加指定需要开放的端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
查询指定端口是否开启成功:
firewall-cmd --query-port=8080/tcp
命令含义:
--zone #作用域
--add-port=8081/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
移除指定端口:
firewall-cmd --permanent --remove-port=8080/tcp
很轻松的就能够把我们的 Spring Boot 项目发布到远程 Docker 容器中,超级方便。