idea中打包docker镜像

news2024/11/18 11:35:19

idea中打包docker镜像

说明

​ 构建和推送镜像都是需要docker环境的,这个大家可以使用同一个远程的环境,这里说的就是idea使用服务器上的docker进行镜像的构建和发布,

​ 默认高版本的idea中默认集成了docker插件,这个插件的官方文档:https://www.jetbrains.com/help/idea/docker.html

​ 提供多种方式连接docker,ssh方式和tcp方式,ssh方式更简单一点。似乎功能上没什么不同。

连接上docker之后,就可以在本地查看服务器上的镜像、容器、网络,本地执行部署镜像的命令(镜像在服务器),发布镜像等。

ssh方式连接docker

这个没啥好说的,配置界面填上docker服务器地址,用户名和密码即可。连接成功后操作界面如下

tcp方式连接docker

说明

docker架构中,Docker daemon( Docker守护进程)负责和客户端通讯,然后和Container交互。这里修改的是Docker daemon的配置。

需要说明的是不添加证书,单独开启tcp访问不安全,这意味着所有人都可以操作你的dcoker,所以这个主要介绍的是添加证书的方式。

部分内容来自:https://cloud.tencent.com/developer/article/2095087 、https://cloud.tencent.com/developer/article/2022355

以下操作主要是生成了CA证书,服务端证书,客户端证书。

ca和服务端相关证书

1、生成私钥

# 1、创建ca存放的目录
mkdir -p /app/docker/ca/
cd /app/docker/ca/

# 2、在当前目录下生成证书私钥文件ca-key.pem,私钥长度是4096,需要输入密码
openssl genrsa -aes256 -out ca-key.pem 4096

**2.**使用CA私钥生成自签名CA证书ca.pem。生成证书时,通过-days 365设置证书的有效期。单位为天,默认情况下为30天。输入第一步中的密码

openssl req -new -x509 -days 365 -subj '/C=CN/ST=jiangxi/L=jiujiang/O=none/OU=none/CN=www.sry1201.cn' -key ca-key.pem -sha256 -out ca.pem

生成CA证书时,需要提供一些公司信息。

  • C表示国家,中国为CN。
  • ST表示省。
  • L表示城市
  • O表示公司
  • OU表示部门名字
  • CN表示公司域名

**3.**生成服务器私钥server-key.pem和CSR(Certificate Signing Request)server-csr.pem。CN为DockerDaemon。

server-csr.pem是一个临时文件,生成server-cert.pem以后,可以删除。

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=www.example.com" -sha256 -new -key server-key.pem -out server.csr

4、配置白名单和秘钥,生成服务端证书

0.0.0.0表示所有ip都可以连接。(这里需要注意,虽然0.0.0.0可以匹配任意,但是仍需要配置你的外网ip(域名)和127.0.0.1,否则客户端会连接不上)

echo subjectAltName = IP:0.0.0.0,IP:123.123.123.123,IP:127.0.0.1 >> extfile.cnf

# 将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

客户端相关证书

1、生成供客户端发起远程访问时使用的key.pem

openssl genrsa -out key.pem 4096

2、生成client.csr(把下面的IP换成你自己服务器外网的IP或者域名)

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

3、创建扩展配置文件,把密钥设置为客户端身份验证用

​ 生成cert.pem,输入前面设置的密码,生成签名证书

echo extendedKeyUsage = clientAuth > extfile-client.cnf

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

删除多余文件和设置权限

1.删除临时文件

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

**2.**为了保证证书和私钥的安全,需要修改文件的访问权限。

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

**3.**重启Docker Daemon,加入ca.pem、server-cert.pem和server-key.pem。-H=0.0.0.0:2376表示Docker Daemon监听在2376端口。

查看配置文件的位置,修改配置文件docker.service

[root@k8s-master ca]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-10-21 18:46:28 CST; 1 months 18 days ago
     Docs: https://docs.docker.com
 Main PID: 3576 (dockerd)
    Tasks: 29
   Memory: 105.3M
   CGroup: /system.slice/docker.service
           └─3576 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

# 原文件
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

# 修改后
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/app/docker/ca/ca.pem --tlscert=/app/docker/ca/server-cert.pem --tlskey=/app/docker/ca/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
# daemon的配置重新加载
systemctl daemon-reload
systemctl restart docker

客户端进行连接

10.从服务器下载客户端需要的证书

客户端证书和ca证书

ca.pem
ca-key.pem
cert.pem
key.pem

配置如图:

本地操作服务器部署镜像

如图

com.spotify

maven构建和发布镜像,不建议用了,可能是很久没更新,跟不上新版本了,反正我操作后报错,

官方文档

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <!--修改imageName节点的内容,改为私有仓库地址和端口,再加上镜像id和 TAG,我们要直接传到私服-->
                    <!--配置最后生成的镜像名,docker images里的,我们这边取项目名:版本-->
                    <imageName>${project.artifactId}</imageName>
                    <!--也可以通过以下方式定义image的tag信息。-->
                    <imageTags>
                        <imageTag>sry1201/${project.artifactId}:${project.version}</imageTag>
                        <imageTag>sry1201</imageTag>
                    </imageTags>
                    <!-- 来指明Dockerfile文件的所在目录 -->
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <dockerHost>https://43.143.136.203:2376</dockerHost>
                    <dockerCertPath>D:\17736\Desktop\dcoker-ca</dockerCertPath>
                    <!--入口点,project.build.finalName就是project标签下的build标签下 的filename标签内容,testDocker-->
                    <!--相当于启动容器后,会自动执行java-jar/testDocker.jar-->
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <!--是否推送到docker私有仓库,旧版本插件要配置maven的settings文件。 小伙伴们可以自行查阅资料研究一下。 -->
                    <pushImage>true</pushImage>
                    <registryUrl>registry.hub.docker.com</registryUrl>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <!--把哪个文件上传到docker,相当于Dockerfile里的add app.jar /-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

尝试了一下,虽然报500,但是镜像在服务器上是构建成功的,不过这些个发布和移除镜像命令都不好使,无语,不用这个了

Fabric8

Fabric8主要是用来构建docker的镜像maven插件。可以参考Fabric8文档,主要是参考资料,理解其插件。

示例项目地址

构建

推送到远程仓库

push到远程仓库需要添加前缀

docker push sry1201/demot:tagname

参考下图

推送成功截图

不过还有问题,就是镜像文件似乎太大了,应该是包含了不需要的东西

关于镜像文件过大的问题

DockerFile中基于java:8和基于openjdk:8-jdk-alpine的大小有一定插件

# 基于哪个镜像
FROM java:8

这个文件夹中可以看到我们添加了那些文件到镜像中,不包含

最终的配置文件

        <plugins>

            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <configuration>
                    <dockerHost>https://43.143.136.203:2376</dockerHost>
                    <certPath>D:\17736\Desktop\dcoker-ca</certPath>
                    <registry>registry.hub.docker.com</registry>
                    <authConfig>

                        <!-- registry服务的认证-->
                        <username>sry1201</username>
                        <password>Sry@1201-</password>
                    </authConfig>
                    <pullRegistry>https://l6b5wweg.mirror.aliyuncs.com</pullRegistry>
                    <pushRegistry>registry.hub.docker.com</pushRegistry>

                    <images>
                        <image>
                            <!--镜像名称 必须是 命名空间/仓库名称:镜像版本号 否则无法推送到远程仓库,需要手动执行tag命令-->
                            <name>sry1201/${project.artifactId}-test3</name>
                            <!--别名:用于容器命名和在docker-compose.yml文件只能找到对应名字的配置-->
                            <alias>2021</alias>
                            <build>
                                <!-- dockerfile文件所在路径 -->
                                <contextDir>${project.basedir}</contextDir>
                                <tags>
<!--                                    <tag>latest</tag>-->
                                    <tag>${project.version}</tag>
                                </tags>
                            </build>



                        </image>
                    </images>

                </configuration>
            </plugin>
        </plugins>

# 基于哪个镜像
FROM java:8
# 复制文件到容器
ADD target/${project.build.finalName}.jar /app.jar
# 声明需要暴露的端口-宿主机端口
EXPOSE 30012
# 配置容器启动后执行的命令
ENTRYPOINT java ${JAVA_OPTS} -jar /app.jar

其他

这个插件和maven的打包插件到底有没有关系还是不明白。。。。。

还有就是这个打包插件可以不依赖Dockerfile,不过似乎更复杂,算了

关联信息

  • 关联的主题:
  • 上一篇:
  • 下一篇:
  • image: 20221021/1
  • 转载自:

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

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

相关文章

高并发高可用

一、高并发 1、异步并发 同步阻塞 异步Future 异步CallBack 异步编排CompletableFuture 请求缓存 请求合并 2、扩容 单体应用垂直扩容 单体应用水平扩容 应用拆分 数据库拆分水平/垂直拆分 使用Sharding-jdbc分库分表/读写分离 数据异构 任务系统扩容 3、队列 …

[LeetCode周赛复盘] 第 93 场双周赛20221015-补

[LeetCode周赛复盘] 第 93 场双周赛20221015-补 一、本周周赛总结二、 [Easy] 6261. 数组中字符串的最大值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6262. 图中最大星和1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6263. 青蛙过河 II1. 题目描述2. 思路分析3. 代码实…

【OpenCV学习】第13课:基本阈值操作

仅自学做笔记用,后续有错误会更改 参考文章:https://blog.csdn.net/qq_37835727/article/details/123373339 理论 图像阈值&#xff1a;什么是图像阈值&#xff1f;简单点来说就是把图像分割的标尺&#xff0c; 举个栗子&#xff0c; 现在想象一个场景&#xff0c; 一个桌子上…

BA_重投影误差e对于相机的位姿ξ和对空间点的坐标P的雅可比矩阵的推导

1. 基本思路 重投影误差表示为e, 相机的位姿表示为ξ (或者表示为T(R,t))&#xff0c; 空间点表示为P, 则空间点投影到相机坐标系下的空间坐标点的相机坐标表示为P[X, Y, Z], 则 重投影误差e对于相机的位姿ξ的雅克比矩阵表示为 分别求等式右侧的两半部分&#xff08;误差对空…

DevExpress WinForms 22.2

DevExpress WinForms 22.2 添加了对Microsoft.NET 7的完全支持。 此版本现在需要.NET 6和Microsoft Visual Studio 2022(v17.0)或更高版本。 这不会影响.NET Framework客户&#xff0c;产品程序集在此发布周期中将继续以.NET Framework 4.5.2为目标。 蒙皮和矢量图标 WXI皮肤的…

每天五分钟机器学习:经典的降维算法——主成分分析法PCA

本文重点 前面我们学习了降维算法的两大应用场景,本节课程我们将学习具体的降维算法PCA,它是主成分分析法。 PCA要做什么? 将二维数据降维到一维,关键就是找到一个方向向量,然后把所有的数据都投射到该向量上,那么什么样的方向向量最好呢? 我们希望投射平均均方误差…

UIPickerView,UIDatePicker,UITextView

文章目录UIPickerView概念应用创建选中数据时的回调代理UIDatePicker概念创建四种模式UITextView概念创建常用属性与方法常用协议方法UIPickerView 概念 UIPickerView是一个列表控件。它可以提供给用户有限个数的可供选择的选项。 他可以设置列数和每一列的行数&#xff0c;然…

Fiddler抓包和Fiddler过滤器

目录 一、Fiddler与其他抓包工具的区别 二、Fiddler的工作原理 三、使用fiddler实现手机抓包 四、Filters过滤器 一、Fiddler与其他抓包工具的区别 1、Firebug虽然可以抓包&#xff0c;但是对于分析http请求的详细信息&#xff0c;不够强大。模拟http请求的功能也不够&…

简述基于JavaEE企业级开发技术

一、绪论 1、学习内容 javaEE企业开发技术概述javaEE容器——SpringORM数据层——MyBatis/JPAWeb层——Spring MVC展现层——JSP/Thymeleaf整合框架——SSM/SSH用户模块分析用户模块功能模块设计 前端框架&#xff1a;Bootstrap&#xff0c;NodeJS&#xff0c;Vue/React/Ang…

[附源码]计算机毕业设计个性化名片网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Appium基础 — Appium测试环境搭建总结

1、Appium测试环境搭建整体思路 &#xff08;1&#xff09;Android测试环境搭建 Android测试环境需要搭建三个环境&#xff0c;Java&#xff0c;AndroidSDK&#xff0c;Android模拟器。 为什么要安装这三个环境&#xff1f; Java&#xff1a;Android的应用程序层使用的语言是…

理解Linux设备树(DTS)

DTS Dts&#xff1a;DTS即Device Tree Source&#xff0c;是一个文本形式的文件&#xff0c;用于描述硬件信息。一般都是固定信息&#xff0c;无法变更&#xff0c;无法overlay。 Dtsi&#xff1a;可以理解为dts的公共部分&#xff0c;添加、变更非常灵活。Dtsi包含在dts中。 …

基于 EasyOCR + HanLp 实现图片文字实体(中文姓名、机构名、地域名)识别

一、EasyOCR HanLp EasyOCR 是一个python版的文字识别工具。目前支持80中语言的识别。并且支持&#xff1a;图像预处理&#xff08;去噪、色彩饱和度、尖锐处理)、CRAFT文字检测、中间处理&#xff08;倾斜处理等&#xff09;、文字识别、后续处理、输出结果。框架如下&#…

RHCE实验--ansible

第四章 1、使用debug模块&#xff0c;显示当前受管主机的dns服务器的ip地址。 2、将createuser.fact文件传输到受管主机上作为自定义事实变量文件&#xff08;/etc/ansible/facts.d/&#xff09;&#xff0c;该文件的内容如下&#xff1a; [general] username wujing mima…

以太网 STP临时环路的产生、STP BPDU的转发过程、根桥故障案例分析。

2.10.2 以太网 传统STP生成树&#xff08;STP临时环路、STP BPDU的转发过程、根桥故障案例&#xff09; 传统STP生成树2.10.2 以太网 传统STP生成树&#xff08;STP临时环路、STP BPDU的转发过程、根桥故障案例&#xff09;STP临时环路&#xff1a;STP BPDU的转发过程&#xff…

多维数据分析

【数据挖掘】数据挖掘#商业智能&#xff08;BI&#xff09;数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 分析型客户关系管理&#xff08;Analytical CRM/aCRM&#xff09;: 用于支持决策&#xff0c;改善公司跟顾客的…

redis集群详细搭建方式(含原理、操作指令、异常处理)

目录 1.概述 2.配置 2.1.配置文件 2.2.合体 2.3.进入cli 3.集群操作 3.1.查看集群信息 3.2.集群中录入值 3.3.查询集群中的值 4.故障处理 1.概述 概念&#xff1a; redis集群是从3.0版本开始支持的一个功能&#xff0c;是redis的一种水平扩展方式&#xff0c;将全局数据分…

NNDL 作业12:第七章课后题

习题7-1在小批量梯度下降中,试分析为什么学习率要和批量大小成正比. 在小批量梯度下降中&#xff1a; 令&#xff0c;则&#xff1a; 因此我们要使得参数最优&#xff0c;则为最优的时候的常数&#xff0c;故学习率要和批量大小成正比。 习题7-2在Adam算法中,说明指数加权平均…

以太网 传统STP生成树的BPDU介绍、STP端口状态介绍与切换过程,STP详细的工作过程。

2.10.1 以太网 传统STP生成树&#xff08;STP BPDU、STP端口状态、STP工作过程&#xff09; STP生成树协议的之间的交互通过STP BPDU&#xff08;根协议数据单元&#xff0c;Bridge Protocol Data Unit&#xff09;进行。 传统STP生成树2.10.1 以太网 传统STP生成树&#xff0…

《码出高效》五 异常与日志

前言 本章主要是讲异常处理&#xff0c;关于异常主要有三个问题&#xff1a; 哪里发生异常 谁来处理异常 如何处理异常 围绕这三个问题就有了一套异常处理机制 异常分类 通常异常时针对不稳定代码的&#xff0c;并且需要区分类型 throw和throws的区别&#xff1a; 以此段代…