Idea集成docker通过ca加密实现镜像打包

​ Idea集成docker实现镜像打包_ideadocker镜像打包-CSDN博客

​ 之前通过这种方式虽然可以实现idea通过maven打jar包的同时把docker镜像也进行打包,但是这种方式存在很大漏洞,就是服务器的2375端口大开,任何人拿着idea通过这种方式都可以连接服务器去进行操作,风险很大。所以这种就只适合自己在局域网访问使用,如果放到公网操作的话,就要通过ca加密后来进行操作。

​ 这是docker官网的Demo,演示如何通过ca加密

https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl

​ 不过我根据官网的操作步骤操作下来,大部分是没问题的,后面有些操作却过不去,所以自己总结了一下。

​ 前面都是根据官网的操作进行

image-20250317133822392

​ 在/usr/local目录下新建一个文件夹ca,并进入这个文件夹开始操作

cd /usr/local/
mkdir ca
cd ca

image-20250317134723318

openssl genrsa -aes256 -out ca-key.pem 4096

​ 执行上面命令后,设置一下秘钥

image-20250317134825818

​ 在连续两次正确秘钥输入后,再执行下面命令

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

​ 此时会要求输入刚才设置的秘钥,当输入秘钥后会要求输入国家、省、市、公司、部门、姓名、邮件地址等信息

image-20250317135224699

​ 接下来按照官方文档的命令继续:

image-20250317135502666

​ 执行下面命令

openssl genrsa -out server-key.pem 4096

image-20250317142859344

​ 上面命令执行后,再执行下面命令,但是 $HOST 要换成对应的docker服务器的ip地址或域名

openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

image-20250317143029892

​ 上面命令执行后,再执行下面命令,但是 $HOST 要换成对应的docker服务器的域名,如果没有域名可以将该参数删除。而后面两个IP第一个是docker服务器的IP,第二个则是本地回环地址就写127.0.0.1即可

echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf

echo subjectAltName = IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf

image-20250317143201455

​ 上面命令执行后,再执行下面命令

echo extendedKeyUsage = serverAuth >> extfile.cnf

image-20250317143555123

​ 上面命令执行后,再执行下面命令,执行的过程中也会提示输入之前设置的秘钥

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf

image-20250317143610936

​ 接下来按照官方文档的命令继续:

image-20250317143817217

​ 执行下面命令

openssl genrsa -out key.pem 4096

image-20250317144251707

​ 上面命令执行后,再执行下面命令

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

image-20250317144312100

​ 上面命令执行后,再执行下面命令

echo extendedKeyUsage = clientAuth > extfile-client.cnf

image-20250317144414862

​ 上面命令执行后,再执行下面命令,执行的过程中,需要输入之前设置的秘钥

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile-client.cnf

image-20250317144504980

​ 接下来可以删除多余的文件

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

image-20250317144645700

​ 接下来按照官方文档的命令继续:

image-20250317155227696

​ 上面命令执行后,再执行下面命令设置权限

chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

image-20250317144927908

​ 但是再继续执行下面命令的时候,可能会报错

dockerd \--tlsverify \--tlscacert=ca.pem \--tlscert=server-cert.pem \--tlskey=server-key.pem \-H=0.0.0.0:2376

image-20250317155351142


​ 之前做到这一步后我卡住了,后来折腾了一翻后终于也算完成

​ 接下来的操作就不照官网操作了,将当前目录下的pem文件进行拷贝到 /etc/docker 目录下

cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

image-20250317155836097

​ 使Docker守护程序仅接受来自提供CA信任的证书的客户端的连接,打开 docker.service 文件

vim /lib/systemd/system/docker.service

​ 将原先ExecStart开头的内容前面加#注释掉

image-20250317160252873

​ 替换为:

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

image-20250317160433154

​ 重新加载daemon并重启docker

systemctl daemon-reload
systemctl restart docker

​ 保存相关客户端的pem文件到本地

image-20250317161133450

​ 在idea中进行相关配置,看到下面提示 Connection successful 就表示连接成功了

image-20250317161623023

​ 在项目根目录下创建Dockerfile文件并添加如下内容,当然具体/target目录下的jar包名,则需要根据实际情况进行修改

FROM openjdk:8-jdk
MAINTAINER BruceWong brucewong@huskystudio.cn
WORKDIR /ROOT
ADD /target/docker-1.0-SNAPSHOT.jar /ROOT/app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
CMD ["java", "-version"]

​ 在SpringBoot项目的pom.xml中的build节点添加如下内容,当然springboot使用的版本要与你使用的对应,dockerHost节点设置为你的docker服务器的地址,dockerCertPath则是你刚才保存相关客户端的pem文件的目录

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- 这里对应你的spring-boot的版本 --><version>2.5.0</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><configuration><!-- 镜像名称 testspringboot--><imageName>brucewong</imageName><!--指定标签--><imageTags><imageTag>latest</imageTag></imageTags><!-- 基础镜像jdk 1.8--><baseImage>openjdk:8-jdk</baseImage><!-- 制作者提供本人信息 --><maintainer>BruceWong brucewong@huskystudio.cn</maintainer><!--切换到/ROOT目录 --><workdir>/ROOT</workdir><cmd>["java", "-version"]</cmd><entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint><!-- 指定 Dockerfile 路径 --><dockerDirectory>${project.basedir}</dockerDirectory><!--指定远程 docker api地址--><dockerHost>https://192.168.2.244:2375</dockerHost><!-- 指定本地证书路径 --><dockerCertPath>D:\Bruce\docker\ca</dockerCertPath><!-- 这里是复制 jar 包到 docker 容器指定目录配置 --><resources><resource><targetPath>/ROOT</targetPath><!--用于指定需要复制的根目录,${project.build.directory}表示target目录--><directory>${project.build.directory}</directory><!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。--><include>${project.build.finalName}.jar</include></resource></resources><!-- 跳过远程镜像查找 --><skipRemoteLookup>true</skipRemoteLookup><!-- 设置连接超时时间 --><timeoutSeconds>120</timeoutSeconds></configuration><!--当执行mvn package 时,执行: mvn clean package docker:build --><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions></plugin><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version><executions><execution><id>auto-clean</id><phase>initialize</phase><goals><goal>clean</goal></goals></execution></executions></plugin></plugins></build>

​ 运行maven的package命令,进行打包,这时候不光是打包了jar文件,同时还将其打包成docker镜像并推送到docker服务器上

image-20250317165642416

image-20250317165813539

​通过docker images命令就可以看到推送到服务器上的镜像为brucwong,因为依赖jdk所以把openjdk也拉取到服务器上

docker images

image-20250317165854484

​在Idea中也可以看到推送的镜像

image-20250317170618484

​这时候可以通过docker run命令根据镜像创建容器,也可以在idea中选中镜像直接创建容器都可以

image-20250317170812268

image-20250317170906678

image-20250317170928882

image-20250317170954453

image-20250317171029217

image-20250317171105717

​通过docker ps命令查看容器情况

docker ps 

image-20250317171136831

总结:

​如果项目是通过docker部署的,那么发布的方式可能是先maven打包成jar,然后拷贝到服务器,删除原先docker的容器与镜像,然后通过docker build -t 生成镜像,再通过docker run命令根据镜像创建容器。

​而通过以上方式则实现了,在idea中能直接打jar的同时打包docker镜像并推送到服务器,只需要手动创建下容器即可,简化了整体的操作步骤,而且通过ca加密后,那么必须有对应秘钥的客户端才能进行打包,安全性也有所提升。

​当然这是单体项目或者团队较小的情况下可以这么试试,如果是项目规模很大团队人员也多的情况下,那更专业的方式肯定是通过 CI/CD 的方式来实现项目部署……

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SOC与电压的关系

与电池相关的参数都与SOC有关&#xff0c;也就是电池剩余容量的百分比即荷电状态。 SOC百分之二十时&#xff0c;对应3.2V,SOC80&#xff05;时对应3.3V。

塔能科技:做节能界的“催化剂”,加速工厂能源改造变革

在全球坚定不移地迈向可持续发展的宏大进程中&#xff0c;节能降耗早已从一种发展理念&#xff0c;深度融入到经济社会发展的每一个脉络之中&#xff0c;成为企业在激烈市场竞争中实现降本增效的核心策略&#xff0c;更是推动整个社会朝着绿色、低碳、循环方向转型的关键支撑点…

【算法学习之路】11.并查集

并查集 前言一.简介二.基础并查集三.基础并查集题目12 四.种类并查集&#xff08;扩展域并查集&#xff09;五.种类并查集的题目 前言 我会将一些常用的算法以及对应的题单给写完&#xff0c;形成一套完整的算法体系&#xff0c;以及大量的各个难度的题目&#xff0c;目前算法也…

【微服务】SpringBoot整合LangChain4j 操作AI大模型实战详解

目录 一、前言 二、Langchain4j概述 2.1 Langchain4j 介绍 2.1.1 Langchain4j 是什么 2.1.2 主要特点 2.2 Langchain4j 核心组件介绍 2.3 Langchain4j 核心优势 2.4 Langchain4j 核心应用场景 三、SpringBoot 整合 LangChain4j 组件使用 3.1 前置准备 3.1.1 获取apik…

【图片批量转换合并PDF】多个文件夹的图片以文件夹为单位批量合并成一个PDF,基于wpf的实现方案

项目背景: 多个图片分布在不同文件夹,如何以文件夹为单位批量合并成一个PDF,还要保证文件夹里面图片大小和顺序 实现功能: 1、单张图片的转换PDF:一张图临时转一下 2、多张图片转换成PDF:多张图单独转成PDF 3、多级目录多张图转换成PDF:多级目录多张图单独转成多个PDF…

因果推荐|可解释推荐系统的反事实语言推理

论文&#xff1a;https://arxiv.org/pdf/2503.08051 代码&#xff1a;GitHub - kylokano/CausalX 很新的论文&#xff0c;南大五天前挂到arxiv的&#xff0c;代码基于Recbole&#xff0c;没给全但是提供了足够的验证。 1 动机 可解释推荐不仅提供高质量的推荐&#xff0c;而…

Zabbix安装(保姆级教程)

Zabbix 是一款开源的企业级监控解决方案,能够监控网络的多个参数以及服务器、虚拟机、应用程序、服务、数据库、网站和云的健康状况和完整性。它提供了灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,从而能够快速响应服务器问题。Zabbix 基于存储的数据提供…

【spring boot 实现图片验证码 前后端】

导入hutool依赖 <!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.36</version>获取验证码接口 Autowiredprivate Captcha captcha;private final static Long VALIDA…

arthas基础命令

文章目录 1. help2. cat3. grep4. pwd5. cls6. session7. reset8. version9. history10. quit11. stop12. keymapArthas 命令行快捷键后台异步命令相关快捷键小结 1. help 作用&#xff1a;查看命令帮助信息 2. cat 作用&#xff1a;打印文件内容&#xff0c;和linux里的cat命…

痉挛性斜颈护理宝典:重拾生活平衡

痉挛性斜颈会给患者的生活带来诸多不便&#xff0c;有效的健康护理对缓解症状、提升生活质量十分关键。 在日常活动方面&#xff0c;患者应保持正确的姿势。站立和坐姿要挺直脊背&#xff0c;避免长时间低头或歪头&#xff0c;减少颈部肌肉的额外负担。睡眠时&#xff0c;选择高…

虚拟定位 1.2.0.2 | 虚拟定位,上班打卡,校园跑步模拟

Fake Location是一款运行于安卓平台上的功能强大、简单实用的虚拟定位软件。它能够帮助用户自定义位置到地图上的任意地方&#xff0c;以ROOT环境运行不易被检测&#xff0c;同时也支持免ROOT运行。提供路线模拟、步频模拟、WIFI模拟等方式&#xff0c;支持反检测。 大小&…

C++基础 [五] - String的模拟实现

目录 前言 string类的模拟实现 成员函数的实现 构造函数 拷贝构造函数 赋值运算符重载 析构函数 元素访问的实现 operator[ ] Iterator - 迭代器 容量大小的实现 size capacity reserve ​编辑resize 内容修改的实现 push_back append operator(char ch) …

嵌入式硬件--开发工具-AD使用常用操作

ad16.1.12 1.如何显示/隐藏其他图层 在pcb界面点击L--试图界面中找到“视图选项”--单层模式选择 not in single layer mode 在pcb界面点击L--试图界面中找到“视图选项”--单层模式选择 gray scale other layers 【Altium】AD如何只显示一层&#xff0c;隐藏其他层显示&…

浏览器好用的去广告插件和暗黑模式护眼插件

提升浏览体验&#xff1a;Edge浏览器的Adblock和Dark Mode扩展 Adblock&#xff1a;告别广告干扰 功能&#xff1a;高效拦截弹窗、横幅和视频广告&#xff0c;提升网页整洁度&#xff0c;加快加载速度&#xff0c;节省流量。安装链接&#xff1a;安装Adblock Dark Mode for E…

MySQL-基础篇

从数据库的基础的概念特性到数据库当中的SQL语句&#xff0c;再到数据库当中的存储引擎、索引优化以及分库分表、数据库的集群&#xff0c;甚至于数据库的底层原理 MySQL概述SQL函数约束多表查询事务 这块由于上学期学过一些就速过。 MySQL概述 通过SQL就可以操作数据库管理…

fastapi+angular外卖系统

说明&#xff1a; fastapiangular外卖系统 1.美食分类&#xff08;粥&#xff0c;粉&#xff0c;面&#xff0c;炸鸡&#xff0c;炒菜&#xff0c;西餐&#xff0c;奶茶等等&#xff09; 2.商家列表 &#xff08;kfc&#xff0c;兰州拉面&#xff0c;湘菜馆&#xff0c;早餐店…

2025高频面试算法总结篇【递归回溯动态规划】

文章目录 递归&回溯131. 分割回文串面试题 08.12. 八皇后 动态规划72编辑距离5. 最长回文子串279. 完全平方数300. 最长递增子序列139. 单词拆分 递归&回溯 131. 分割回文串 回溯思路&#xff1a; 临界条件&#xff1a; if (start s.length) > 保存 循环遍历这个…

Ubuntu docker安装milvusdb

一、安装docker 1.更新软件包 sudo apt update sudo apt upgrade sudo apt-get install docker-ce docker-ce-cli containerd.io查看是否安装成功 docker -v二、使用国内的镜像下载 milvusdb Docker中国区官方镜像: https://registry.docker-cn.com milvusdb/milvus - Doc…

Redis如何实现持久化

Redis如何实现持久化 Redis默认将所有数据存储在内存中&#xff0c;虽然读写效率极高&#xff0c;但存在两大风险 数据易失性&#xff1a;进程重启或服务器宕机导致内存数据丢失。恢复成本高&#xff1a;无法直接通过内存重建大规模数据集。 Redis作为高性能的键值数据库&…

DeepSeek进阶应用(二):结合Kimi制作PPT(双AI协作教程)

&#x1f31f;引言&#xff1a; DeepSeek作为国产AI大模型&#xff0c;以强大的逻辑推理和结构化内容生成能力著称&#xff0c;擅长根据用户需求生成PPT大纲或Markdown文本&#xff1b;Kimi的PPT助手则能解析结构化内容并套用模板快速生成美观的PPT&#xff0c;两者结合实现“内…