IDEA快速部署Spring Boot 项目到Docker的实现方法

 更新时间:2023年07月28日 08:36:39   作者:结构化思维wz  
本文主要介绍了IDEA快速部署Spring Boot 项目到Docker的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、IDEA 连接 Docker

我们通常使用TCP的方式连接Docker,所以我们需要配置Docker并开放端口,如果是本地虚拟机,可以简单使用http的方式进行连接(不建议),如果你是远程服务器,请务必采用安全的连接方式(https)

自己的虚拟机

如果是自己的虚拟机,可以不需要创建CA证书。可以使用http://ip:端口号的形式连接。

:one: 编辑docker.service文件

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

找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375

img

这样相当于对外开放的是 2375 端口,当然也可以根据自己情况修改成其他的。

:two: 重新加载Docker配置生效

systemctl daemon-reload 
systemctl restart docker 

:three: 测试是否能访问

#浏览器访问
ip:2375/vsersion

如果访问成功证明已配置成功。

如果无妨访问,请检查防火墙是否开放2375端口:

#查看防火墙开放列表
firewall-cmd --list-ports
#增加2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
#重启防火墙
firewall-cmd --reload

:four: 通过IDEA连接

image-20230328160853784

远程服务器

**如果是远程服务器,一定要创建CA证书。**使用https://ip:端口号的形式连接。(否则你的Docekr任何人都可以推送镜像,分分钟取挖矿)

下面我将命令都抽离出来,方便运行。[ip]替换为你的服务器ip

(如果想看更详细的分步骤运行,请看[这篇文章](Docker开启远程安全访问),但是注意其中5.2章节的一个错误:extfile.cnf 这里不能用官方给的,不要DNS)

#1、创建CA私钥和CA公钥
mkdir -p /usr/local/ca
cd /usr/local/ca
#2.然后在Docker守护程序的主机上,生成CA私钥和公钥:执行完后,这里会要我们输入密码,请牢记,例如我这里输入wang123
openssl genrsa -aes256 -out ca-key.pem 4096
#3.补全CA证书信息,执行后需要输入,访问密码、国家、省、市、组织名称、单位名称、CommonName、邮箱等
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
#4.生成server-key.pem
openssl genrsa -out server-key.pem 4096
#5.用CA签署公钥:
openssl req -subj "/CN=[ip]" -sha256 -new -key server-key.pem -out server.csr
#6.匹配白名单,允许指定的ip可以连接到服务器中的docker,这里允许所有携带ca的ip
echo subjectAltName = IP:[ip],IP:0.0.0.0 >> extfile.cnf
#7.将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证:
echo extendedKeyUsage = serverAuth >> extfile.cnf
#8.生成签名证书,执行完后需要输入密码,上面我们设置的密码(wang123)
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out server-cert.pem -extfile extfile.cnf
#9. 生成客户端的key.pem
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
#10.使秘钥适合客户端身份验证
echo extendedKeyUsage = clientAuth >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf
#11.生成签名证书,执行完后需要输入密码
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out cert.pem -extfile extfile-client.cnf
#12.删除不需要的文件
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
#13.设置权限
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
#14.归集服务器证书
cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

创建完证书之后,我们需要修改Docker配置:

#使Docker守护程序仅接收来自提供CA信任的证书的客户端的链接
vim /lib/systemd/system/docker.service

ExecStart 属性值进行替换:

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock复制代码

重新加载daemon并重启docker

systemctl daemon-reload
systemctl restart docker

注意,请检查防火墙和安全组是否都开放了此端口:2375

然后将ca证书下载到本地:

image-20230328163253175

配置完就可以取IDEA的Docker中进行配置:

image-20230328163212670

二、Maven插件与Dockerfile

docker-maven-plugin

我们IDEA已经可以连接Docker,我们想在package的时候,把打包镜像推送到Docker当中,我们需要配置Maven插件:

<plugin><!--制作docker镜像的maven插件-->
   <groupId>com.spotify</groupId>
   <artifactId>docker-maven-plugin</artifactId>
   <version>1.2.2</version>
   <executions>
      <execution>
         <id>build-image</id>
         <phase>package</phase>
         <goals>
            <goal>build</goal>
         </goals>
      </execution>
   </executions>
   <configuration>
      <imageName>${project.artifactId}</imageName><!--镜像名-->
      <imageTags>
         <imageTag>latest</imageTag>
      </imageTags>
      <dockerCertPath>./ca</dockerCertPath><!--证书所在的目录-->
      <dockerDirectory>${project.basedir}</dockerDirectory><!--Dockerfile所在的目录-->
      <dockerHost>https://ip:2375</dockerHost><!--docker所在的宿主机地址-->
      <resources>
         <resource><!--这里配置的就是打包后jar所在的位置-->
            <targetPath>/</targetPath>
            <directory>${project.build.directory}</directory>
            <include>${project.build.finalName}.jar</include>
         </resource>
      </resources>
   </configuration>
</plugin>

Dockerfile

FROM java:8
#作者
MAINTAINER wangze
#挂在
VOLUME /tmp
#将jar包添加到容器中并更名
ADD project-manage-service-0.0.1-SNAPSHOT.jar pms.jar
#运行jar
RUN bash -c 'touch /pms.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/pms.jar"]

三、项目打包上传镜像

当我们执行package操作后,会自动将jar包作为image上传到Docker中:

image-20230328163820463

可以在IDEA右下角的服务中,找到Docker连接,查看镜像

image-20230328163958744

四、容器的创建与运行

容器的创建

先找到刚才打包的镜像:

image-20230328115451996

然后右键创建一个容器:

这里端口格式为:主机端口:容器端口

例如你的项目在容器中是8080端口,你主机的8080已经被占用,你可以这样写:

#访问的时候 http://ip:8090/
8090:8080

image-20230328130613849

运行容器,我们可以看到对应的日志:

image-20230328130552226

环境的检查

首先检查服务器的防火墙:

firewall-cmd --list-ports

如果主机端口没有开放,则开放防火墙:

firewall-cmd --zone=public --add-port=8090/tcp --permanent
#重启防火墙
firewall-cmd --reload

PS: 如果是远程服务器,记得配置安全组

访问项目检验

访问项目的地址,可以正常访问,即为成功发布

参考文章:

Docker开启远程安全访问

到此这篇关于IDEA快速部署Spring Boot 项目到Docker的实现方法的文章就介绍到这了,更多相关IDEA部署Spring Boot到Docker内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java+io+swing实现学生信息管理系统

    java+io+swing实现学生信息管理系统

    这篇文章主要为大家详细介绍了java+io+swing实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • springboot集成mqtt的实践开发

    springboot集成mqtt的实践开发

    本篇文章主要介绍了springboot集成mqtt的实践开发,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java中文件操作和IO的实例练习

    Java中文件操作和IO的实例练习

    Java IO流和文件操作实现过程解析是Java语言中的一种基本操作,IO流是Java中处理输入输出的基础,这篇文章主要介绍了Java中文件操作和IO实例练习的相关资料,文中通过代码及图文介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • java Hibernate 一对多自身关联问题

    java Hibernate 一对多自身关联问题

    formBean在提交表单的时候,域中数据库在下一次中仍然保留引起的,struts formBean 默认的scope为session,手动设置为request,就好了
    2008-07-07
  • Spring结合WebSocket实现实时通信的教程详解

    Spring结合WebSocket实现实时通信的教程详解

    WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议,本文将使用Spring结合WebSocket实现实时通信功能,有需要的小伙伴可以参考一下
    2024-01-01
  • springboot实现对接poi 导出excel折线图

    springboot实现对接poi 导出excel折线图

    在Spring Boot项目中使用Apache POI库可以实现将数据导出为Excel并嵌入动态生成的折线图,具有一定的参考价值,感兴趣的可以了解一下
    2025-10-10
  • Java实现String转Integer的四种方案对比

    Java实现String转Integer的四种方案对比

    在Java项目开发中,经常会有类型转换处理,这篇文章主要为大家详细介绍了Java实现String转Integer的四种方案对比,感兴趣的小伙伴可以了解下
    2026-03-03
  • java对同一个文件进行读写操作方法

    java对同一个文件进行读写操作方法

    在本篇文章里我们给大家详细讲述了java对同一个文件进行读写操作的方法和知识点,需要的朋友们可以参考学习下。
    2018-10-10
  • Java中不用第三个变量来互换两个变量的值

    Java中不用第三个变量来互换两个变量的值

    在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值
    2021-10-10
  • mybatis3.4.6 批量更新 foreach 遍历map 的正确姿势详解

    mybatis3.4.6 批量更新 foreach 遍历map 的正确姿势详解

    这篇文章主要介绍了mybatis3.4.6 批量更新 foreach 遍历map 的正确姿势详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论