IDEA配置Docker一键部署SpringBoot项目(企业级做法)
Posted DT辰白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA配置Docker一键部署SpringBoot项目(企业级做法)相关的知识,希望对你有一定的参考价值。
Docker一键部署SpringBoot项目
前言
怎么部署 Spring Boot?打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过这些都过时了,容器化部署应该是目前的主流方案。
如何将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目,今天我们就来了解一下,真的很秀哦。
一、开启Linux的Docker远程访问
1.1 安装vim工具:
yum install vim -y
1.2 修改daemon.json
的配置:
vim /etc/docker/daemon.json
1.3 加入配置:
"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"]
}
1.4 重新读取配置文件,并重启docker服务
然后让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查看是否生效:
curl http://127.0.0.1:2375/info
二、IDEA安装Docker插件
高版本的IDEA默认给我们安装了Docker了。
如果是低版本的IDEA,可以点击 File->Settings->Plugins->Browse Repositories 搜索docker安装。
三、IDEA配置Docker
配置docker,连接docker服务。
输入IP+端口,测试连接成功,确定应用之后,自动弹出Docker框:
也就是在IDEA的sevice任务栏里面可以看到。
测试一下:
之前的容器,因为重启了docker之后,已经停掉了,那么用以前的启动方式,需要:
docker ps -a
// 然后
docker start 容器ID
IDEA配置好Docker之后,直接右键容器启动,如下:
四、SpringBoot整合Docker配置
4.1 安装pom依赖
docker-maven-plugin插件:
<!--docker-maven-plugin插件打包-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--镜像名称-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!--基础镜像jdk1.8-->
<baseImage>java</baseImage>
<!--制作者提供本人信息-->
<maintainer>dt@email.com</maintainer>
<!--切换到Root目录-->
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!--指定DockerFile路径-->
<!--<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>-->
<!--指定远程docker api地址-->
<dockerHost>http://192.168.31.6:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<!--用于指定需要复制的根目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的jar文件-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
4.2 maven打包
执行命令打包:
mvn clean package docker:build
docker images
4.3 启动镜像
启动镜像:
-p 是做端口映射,此时将服务器中的8080端口映射到容器中的8081(项目中端口配置的是8081)端口
Container name: 也可以指定容器名称,也可以不指定
访问测试:
http://192.168.31.6:8080/list
4.3 扩展操作
当执行mvn package的时候:执行mvn clean package docker:build,也就是先clean一下maven,然后再build打包,免去我们手动clean的操作。
<!--扩展操作-->
<!--当执行mvn package的时候:执行mvn clean package docker:build-->
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</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端口没有对外开放。
1、检查IP是否能ping通
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 容器中,超级方便。
以上是关于IDEA配置Docker一键部署SpringBoot项目(企业级做法)的主要内容,如果未能解决你的问题,请参考以下文章
2021-07-07 idea使用Alibaba Cloud Toolkit插件一键部署SpringBoot项目到Docker