idea docker springboot_一键部署

idea (70) 2023-03-25 08:03

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说idea docker springboot_一键部署,希望能够帮助你!!!。

前言

怎么部署 Spring Boot?打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过这些都过时了,容器化部署应该是目前的主流方案。 如何将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目,今天我们就来了解一下,真的很秀哦。

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第1张


一、开启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

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第2张 curl查看是否生效:

curl http://127.0.0.1:2375/info

二、IDEA安装Docker插件

高版本的IDEA默认给我们安装了Docker了。

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第3张 如果是低版本的IDEA,可以点击 File->Settings->Plugins->Browse Repositories 搜索docker安装。

三、IDEA配置Docker

配置docker,连接docker服务。

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第4张 输入IP+端口,测试连接成功,确定应用之后,自动弹出Docker框: idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第5张

也就是在IDEA的sevice任务栏里面可以看到。

测试一下:

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第6张

之前的容器,因为重启了docker之后,已经停掉了,那么用以前的启动方式,需要:

docker ps -a
// 然后
docker start 容器ID

IDEA配置好Docker之后,直接右键容器启动,如下:

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第7张

四、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

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第8张

docker images

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第9张

4.3 启动镜像

启动镜像:

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第10张

-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

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第11张

使用mvn package打包构建docker镜像成功后:

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第12张 idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第13张

docker build或者docker pull的时候,由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为none的镜像。这类无标签镜像也被称为虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
docker images -f dangling=true

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第14张

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。

docker rmi $(docker images -q -f dangling=true)

最后运行启动测试:

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第15张 idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第16张

启动测试成功。

五、可能出现的问题

浏览器无法访问网页、2375和8080端口没有对外开放。

1、检查IP是否能ping通

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第17张

2、检查端口号是否开放

telnet xxx 端口号

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第18张

如果出现如上窗口,证明端口已经开放。

如果端口未开放,解决方案:

查询指定端口是否已开:

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

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第19张

idea docker springboot_一键部署_https://bianchenghao6.com/blog_idea_第20张

总结

很轻松的就能够把我们的 Spring Boot 项目发布到远程 Docker 容器中,超级方便。

JAVA全栈技术 :群号 176251012 》》》CSDN博客:blog.csdn.net/qq_41107231

发表回复