IDEA快速部署Spring Boot 项目到Docker

news2024/10/5 15:32:01

IDEA快速部署Spring Boot 项目到Docker

文章目录

  • IDEA快速部署Spring Boot 项目到Docker
    • 一、IDEA 连接 Docker
      • 自己的虚拟机
      • 远程服务器
    • 二、Maven插件与Dockerfile
      • docker-maven-plugin
      • Dockerfile
    • 三、项目打包上传镜像
    • 四、容器的创建与运行
      • 容器的创建
      • 环境的检查
      • 访问项目检验

一、IDEA 连接 Docker

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

自己的虚拟机

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

1️⃣ 编辑docker.service文件

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

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

img

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

2️⃣ 重新加载Docker配置生效

systemctl daemon-reload 
systemctl restart docker 

3️⃣ 测试是否能访问

#浏览器访问
ip:2375/vsersion

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

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

#查看防火墙开放列表
firewall-cmd --list-ports

#增加2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent

#重启防火墙
firewall-cmd --reload

4️⃣ 通过IDEA连接

image-20230328160853784

远程服务器

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

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

(如果想看更详细的分步骤运行,请看[这篇文章](Docker开启远程安全访问 - niceyoo - 博客园 (cnblogs.com)),但是注意其中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开启远程安全访问 - niceyoo - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4月18日第壹简报,星期二,农历闰二月廿八

4月18日第壹简报&#xff0c;星期二&#xff0c;农历闰二月廿八坚持阅读&#xff0c;静待花开1. 《中国卫生健康发展评价报告&#xff08;2022&#xff09;》蓝皮书发布&#xff0c;排名前十依次为&#xff1a;北京、深圳、杭州、上海、青岛、武汉、昆明、广州、厦门和宁波。2.…

【Docker学习三部曲】——进阶篇

Compose 1️⃣ 什么是 Docker-Compose ? Docker Compose 是Docker官方提供的一个用于定义和运行多个容器的工具&#xff0c;它采用了声明式的语法定义单个应用程序的多个容器以及它们之间的相互关系和依赖关系。 使用Docker Compose&#xff0c;您可以通过一个配置文件来管…

消防规范图集大全

总说明 A-800X650 (1)箱体长.煌尺寸代号(尺寸单位:mm) B-1000X700; C-1200X750 D-带灭火器箱组合式消防柜; E-非标准箱。 1本图集是依据现行有关国家标准和规范 在1999年编制的《室内消火栓安装》 (2)水带安置方式代号 (99S202)全国通用给水排水标准图集的基础上重新编制的。 P…

理解TreeMap结构及其实现

TreeMap是基于红黑树&#xff08;Red-Black tree&#xff09;的 NavigableMap 实现(是自平衡的二叉树)。该映射根据其键的自然顺序进行排序&#xff0c;或者根据创建映射时提供的 Comparator 进行排序&#xff0c;具体取决于使用的构造方法。 一、对外开放API TreeMap提供了保证…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

全网最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

目录 一.快速排序 1.基本介绍 2.基本思想 二.Hoare快排 0.前情知识 1.交换数组中的两个元素 2.指定范围的插入排序 1.基本思路 2.代码实现 3.优化思路 三.挖坑法快排(校招中适用) 1.基本思路 2.代码实现 四.二路快排 1.基本思路 2.代码实现 3.优化思路 五.三…

浅谈ChatGPT(人工智能)

带你了解ChatGPT 1.ChatGPT是什么2.ChatGPT的特点3.ChatGPT的用途4.ChatGPT出现给社会带来的影响5.ChatGPT存在的问题6.ChatGPT的未来发展趋势7.总结 1.ChatGPT是什么 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是美…

如何通过开源项目搭建私有云平台--第三步:部署镜像仓库

第三步 部署镜像仓库 采用开源的harbor来进行部署&#xff0c;分别在两台服务器进行部署&#xff0c;然后实现两个镜像仓库数据同步 具体部署环境如下&#xff1a; 10.10.10.3 主harbor 操作系统&#xff1a; centos 8 10.10.10.4 备用harbor 操作系统&#xff1a;cen…

【使用者手册】手动改善IntelliJ IDEA和Scala插件性能

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 在…

解决webassembly pthread 子线程调用主线程js问题

解决webassembly pthread 子线程调用主线程js问题 背景&#xff1a; web端项目做了一段时间后&#xff0c;我们需求是加载工程是异步的&#xff0c;主线程会调用wasm方法&#xff0c;wasm内部用pthread创建出来线程&#xff0c;然后在这个线程里边处理任务&#xff0c;处理完…

园区智慧导览地图软件,智慧工厂导航定位怎么解决方案的

智慧工厂导航定位怎么解决方案的地图新基建是行业的核心数字基础需求之一&#xff0c;行业内中已构建了较为完整的城市级地理信息系统。园区管理涉及众多方面&#xff0c;因此园区的智慧信息化建设至关重要&#xff0c;需求越来越广泛。在智慧园区中&#xff0c;基于园区的电子…

【C++类和对象】类和对象(上){初识面向对象,类的引入,类的定义,类的访问限定符,封装,类的作用域,类的实例化,类对象模型,this指针}

一、面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。…

瑞吉外卖:项目介绍和环境搭建

文章目录 软件开发基础软件开发流程角色分工软件环境 瑞吉外卖项目介绍项目介绍开发流程技术选型功能架构角色 环境搭建 软件开发基础 软件开发流程 需求分析&#xff1a;产品原型&#xff08;大体结构、页面、功能等&#xff09;和需求规格说明书设计&#xff1a;产品文档、…

TCP/UDP的头部字段细节

目录 TCP头部字段 一、源端口目的端口&#xff08;各占2字节&#xff09; 二、序列号&#xff08;4字节&#xff09; 三、确认号&#xff08;4字节&#xff09; 四、数据偏移&#xff08;4位&#xff09; 五、保留位&#xff08;6位&#xff09; 六、六个控制位&#xff…

『pyqt5 从0基础开始项目实战』09.本地数据配置文件的保存与读取之txt类型(保姆级图文)

目录 导包和框架代码绑定按钮点击事件在dialog中编写代理配置弹窗UI和功能实现代理配置弹窗UI方法完整代码main.pythreads.pydialog.py 总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续…

Jenkins 实现自动化部署

安装 windows下安装&#xff1a;https://blog.csdn.net/u014641168/article/details/130286547 linux下安装&#xff1a;https://blog.csdn.net/u014641168/article/details/130282439 Jenkins支持JDK1.8对应版本说明&#xff1a;https://blog.csdn.net/u014641168/article/…

STM32 学习笔记_3 程序编写基础;arm 内核架构

程序编写基础 Keil 编辑器设置 抛开 tab 和空格哪个好看不谈&#xff0c;不同编译器设置格式不同&#xff0c;空格比较保险。 用户关键字&#xff1a;打出来的时候会高亮。 代码提示&#xff1a;&#xff08;symbols after 是几个字符后开始提示关键字的意思&#xff09; 以上…

6、索引的数据结构

3.3 常见的索引概念 索引按照物理实现方式&#xff0c;索引可以分为 2 种&#xff1a;聚簇和非聚簇索引 1、聚簇索引 5、索引的代价 空间上的代价 每建立一个索引都要为它建立一棵B树&#xff0c;每一棵B树的每一个节点都是一个数据页&#xff0c;一个页默认会占用 16KB 的存…

jsp827+java心理测评管理系统dzkfB4程序j2EE+mysql

现代社会的大学生是21世纪的主人&#xff0c;他们不仅需要具有为社会做贡献的真才实学&#xff0c;更需要健康的心理。大学生的身心健康&#xff0c;人格健全和谐发展是他们学习的需要&#xff0c;是社会对未来参与者素质的要求。 1&#xff0e;系统登录&#xff1a;系统登录是…

thinkphp:插入数据到数组

一、插入数据到数组首位&#xff08;array_unshift&#xff09;&#xff0c;这里全用空值进行插入 $array [a,b,c]; //在首位加入一个空值 array_unshift($array ,); //将数组输出 print_r($array); 输出结果&#xff1a; 二、插入数据到数组末尾&#xff08;array_push&…