IDEA配置Docker一键部署SpringBoot项目(企业级做法)

Posted DT辰白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA配置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

IDEA配合Docker插件进行一键部署

IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证

IDEA 使用 Docker 插件,实现一键自动化部署

IDEA 使用 Docker 插件,实现一键自动化部署

一键部署应用到远程服务器,IDEA 官方 Docker 插件太顶了!