使用idea部署springboot项目到docker实践

 更新时间:2026年04月25日 15:49:02   作者:今日相乐,皆当喜欢  
这篇文章主要介绍了使用idea部署springboot项目到docker实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

本篇博客记录如何用idea里的docker插件去部署springboot项目到docker容器里

相关Linux的准备工作

1、配置docker远程连接端口

编辑服务器上的docker.service文件

vi /usr/lib/systemd/system/docker.service

找到如下图所示的地方,添加以下东西(版本需为centos7以上):

-H tcp://0.0.0.0:2375

如果版本是centos7以下的则直接在这一行的最后添加即可,centos7以下版本添加后的全部代码为:

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

2、保存修改退出,重启docker

systemctl daemon-reload
service docker restart

3、测试远程连接是否正常

curl http://localhost:2375/version

如果出现以下内容则能正常连接:

4、开放端口

需要将2375端口进行开放才能被远程连接,如果是阿里云主机的话,可以直接登录阿里云去进行开放:

如果是虚拟机的话,可以用以下命令进行开放:

firewall-cmd --zone=public --add-port=2375/tcp --permanent

然后用浏览器访问Linux主机的IP:2375/version,测试端口是否开放成功

5、在docker里装MySQL数据库

(如果已经装过则不用)

#拉取MySQL镜像
docker pull mysql:5.7
#使用镜像开启服务(PASSWORD后面是root用户的密码)
docker run -d -p 3308:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

然后看MySQL是否已启动:

如果已启动,则可以用工具去连接,注意端口用3308,因为MySQL的3306端口映射成了3308

6、在docker里装redis

(如果已经装过则不用)

#拉取redis镜像
docker pull redis
#启动redis
#redis-server --appendonly yes:在容器执行redis-server启动命令,并打开redis持久化配置
#requirepass "123456":配置redis连接密码
docker run --name redis -p 6379:6379 -d --restart=always redis redis-server --appendonly yes --requirepass "123456"

然后看redis是否已启动:

如果已启动,则可以用工具去连接,端口用6379

相关idea的操作

1、下载docker插件

在File-》Setting-》Plugins-》Browse Repositones进行下载:

2、使用docker插件连接到Linux上的docker容器

在File-》Settings-》Build, Execution, Deployment-》Docker里用Linux主机的IP:2375进行连接:

连接成功后可以看到docker里所有的镜像以及容器:

3、在项目中添加一个docker文件夹并创建Dockerfile文件

Dockerfile文件的内容如下:

#这是基础镜像
FROM java:8
VOLUME /tmp
#复制jar包到镜像中,并且将名字改成app.jar
ADD springboot_project.jar app.jar
#在容器启动的时候运行命令,来启动我们的项目(这其实就是一段Linux命令)
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

建议先登录Linux用命令拉取java:8基础镜像,这样以免到后面build镜像的时候才拉取,造成用时很长

4、在pom.xml里添加docker相关配置

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <!--绑定mvn package命令,当执行package这个maven命令打包项目的同时
        会把target目录下的jar包给copy到docker目录去-->
    <executions>
        <execution>
            <phase>package</phase>
            <configuration>
                <tasks>
                    <copy todir="src/main/docker" file="target/${project.artifactId}.${project.packaging}"></copy>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

5、添加一个docker配置

具体配置如下:

部分解释如下:

  • Name:这个根据自己的项目进行命名
  • Server:这个就是远程的服务器上的docker
  • Dockerfile:这个就是自己项目的Dockerfile文件
  • Image Tag:不能重复根据自己项目来定义
  • Container name:创建你自己生成容器的名字
  • Bindports:绑定服务器对外提供的端口和自己项目的端口(阿里云的端口需要在后台自行管理打开)。格式为[宿主机端口]:[容器内部端口]
  • Bind mounts:静态资源存放路径的映射,根据自己的项目自行映射。格式为[宿主机目录]:[容器内部目录]            
  • Command line options:这是docker内部的机制当某个容器需要其他运行容器的时候需要在这里配置。语法:--link 运行容器的名称: 自己定义的名称(多个的容器的话需要使用空格分隔)

6、将项目打成jar包

打包成功后,项目的target目录跟docker目录下都有一个jar包

7、运行docker来build镜像

运行之前配置好的Dockerfile,打包镜像,并将镜像部署到远程docker运行:

8、用浏览器访问项目看效果

用浏览器访问Linux主机IP+端口+项目名,效果如下:

部署期间遇到的问题

项目部署成功后访问登录页面,调用后端接口生成的图片验证码显示不出来,看日志在报空指针异常,如下图:

产生原因

我开始用的jdk基础镜像是openjdk:8-jdk-alpine,这个版本的jdk相比于我们平时用的jdk是不完整的,有些包是没有的,所以导致空指针异常的出现

解决方案

将基础镜像换成java:8

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java线程池合理设置最大线程数和核心线程数方式

    java线程池合理设置最大线程数和核心线程数方式

    这篇文章主要介绍了java线程池合理设置最大线程数和核心线程数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Freemarker中的3种循环模式

    Freemarker中的3种循环模式

    这篇文章主要介绍了Freemarker中的3种循环模式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • SpringBoot-Mail工具实现邮箱验证码登录注册功能

    SpringBoot-Mail工具实现邮箱验证码登录注册功能

    现在许多pc程序都有着使用邮箱验证码实现登录注册的功能,那么我们应该如何完成邮箱验证码功能呢,我们可以使用springboot内置的springboot-mail再结合redis来完成这个功能,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • Spring中@DependsOn注解的作用及实现原理解析

    Spring中@DependsOn注解的作用及实现原理解析

    这篇文章主要介绍了Spring中@DependsOn注解的作用及实现原理解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • idea安装hsdis的方法

    idea安装hsdis的方法

    这篇文章主要介绍了idea安装hsdis,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java数据结构基础:稀疏数组

    java数据结构基础:稀疏数组

    今天带大家了解一下Java稀疏数组的相关知识,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-08-08
  • Spring Boot启动加载流程自动配置的底层原理(专家解读)

    Spring Boot启动加载流程自动配置的底层原理(专家解读)

    Spring Boot这么少的配置却能实现如此丰富的功能?为何启动一个Spring Boot应用可以变得如此简单便捷?在这个看似平凡的启动过程中,其实隐藏着一套精妙的自动化机制和源码逻辑,本文将带你深入探索 Spring Boot 的启动流程,逐步揭开自动配置的幕后奥秘
    2026-01-01
  • Java实现百万数据分批次插入的最佳实践分享

    Java实现百万数据分批次插入的最佳实践分享

    在当今数据驱动的应用开发中,处理大批量数据插入是后端开发人员经常面临的挑战,随着业务规模的扩大,数据量呈现爆发式增长,传统单条插入方式在面对百万级数据时显得力不从心,所以本文给大家分享了Java实现百万数据分批次插入的最佳实践,需要的朋友可以参考下
    2025-07-07
  • Spring中基于XML的AOP配置详解

    Spring中基于XML的AOP配置详解

    这篇文章主要介绍了Spring中基于XML的AOP配置,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 浅谈MySQL中是如何实现事务提交和回滚的

    浅谈MySQL中是如何实现事务提交和回滚的

    本文主要介绍了MySQL中是如何实现事务提交和回滚的,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论