3、Dockerfile 深入与其他细节
Dockerfile

在 Docker 中创建镜像最常用的方式,就是使用 Dockerfile。Dockerfile 是一个 Docker 镜像
的描述文件,我们可以理解成火箭发射的 A、B、C、D…的步骤。Dockerfile 其内部包含了一
条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
示例
#基于 centos 镜像
FROM centos
#维护人的信息
MAINTAINER My CentOS <534096094@qq.com>
#安装 httpd 软件包
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件至镜像中 web 站点下
ADD index.html /var/www/html/index.html
#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#当启动容器时执行的脚本文件
CMD ["/run.sh"]

复杂一点的示例
#在 centos 上安装 nginx
FROM centos
#标明著作人的名称和邮箱
MAINTAINER xxx xxx@qq.com
#测试一下网络环境
RUN ping -c 1 www.baidu.com
#安装 nginx 必要的一些软件
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
#把 nginx 安装包复制到/usr/src/目录下,如果是压缩包还会自动解压,是网络路径会自动
下载
ADD nginx-1.15.8.tar.gz /usr/src/
#切换到/usr/src/nginx-1.15.8 编译并且安装 nginx
RUN cd /usr/src/nginx-1.15.8 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
&& nginx
#删除安装 nginx 安装目录
RUN rm -rf /usr/src/nginx-nginx-1.15.8
#对外暴露 80 端口
EXPOSE 80
#启动 nginx
CMD ["nginx", "-g", "daemon off;"]
2、常用指令

2、镜像操作
1、创建项目 dockerfile
2、上传项目到服务器。
3、进入项目,构建镜像到本地仓库;
(1) docker build -t nginx:GA-1.0 -f ./Dockerfile . 别忘了最后的小数点。
(2) docker images 查看镜像
(3) docker exec -it 容器 id /bin/bash;进入容器,修改容器
(4) docker commit -a “leifengyang” -m “nginxxx” 容器 id mynginx:GA-2.0
1 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
2 OPTIONS 说明:
1) -a :提交的镜像作者;
2) -c :使用 Dockerfile 指令来创建镜像;
3) -m :提交时的说明文字;
4) -p :在 commit 时,将容器暂停。
(5) docker login : 登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官
方仓库 Docker Hub
1 docker login -u 用户名 -p 密码
(6) docker logout : 登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官
方仓库 Docker Hub
4、推送镜像到 docker hub
(1) 标记镜像,docker tag local-image:tagname username/new-repo:tagname
(2) 上传镜像,docker push username/new-repo:tagname
5、保存镜像,加载镜像
(1) 可以保存镜像为 tar,使用 u 盘等设备复制到任意 docker 主机,再次加载镜像
(2) 保存:docker save spring-boot-docker -o /home/spring-boot-docker.tar
(3) 加载:docker load -i spring-boot-docker.tar
6、阿里云操作
(1) 登录阿里云,密码就是开通镜像仓库时 的密码
docker login --username=qwertyuiopasdf_aa registry.cn-hangzhou.aliyuncs.com
(2) 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/atguigumall/gulimall-nginx:v1.0
(3)推送镜像
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/atguigumall/gulimall-nginx:v1
docker push registry.cn-hangzhou.aliyuncs.com/atguigumall/gulimall-nginx:v1
K8S 细节
1、kubectl
1、kubectl 文档
https://kubernetes.io/zh/docs/reference/kubectl/overview/
2、资源类型
https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%B
B%E5%9E%8B
3、格式化输出
https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E6%A0%BC%E5%BC%8F%E5%8C%9
6%E8%BE%93%E5%87%BA
4、常用操作
https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E7%A4%BA%E4%BE%8B-%E5%B8%
B8%E7%94%A8%E6%93%8D%E4%BD%9C
5、命令参考
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-command
2、yaml 语法
1、yml 模板

2、yaml 字段解析
参照官方文档
3、入门操作
1、Pod 是什么,Controller 是什么
https://kubernetes.io/zh/docs/concepts/workloads/pods/#pods-and-controllers
Pod 和控制器
控制器可以为您创建和管理多个 Pod,管理副本和上线,并在集群范围内提供自修复能力。
例如,如果一个节点失败,控制器可以在不同的节点上调度一样的替身来自动替换 Pod。
包含一个或多个 Pod 的控制器一些示例包括:
Deployment
StatefulSet
DaemonSet
控制器通常使用您提供的 Pod 模板来创建它所负责的 Pod

2、Deployment&Service 是什么

Deployment
作用于一组Pod的创建和运行,控制pod应用的升级、回滚,当然也能控制pod的数量。
在K8S中,一方面Pod有伸缩与重新部署的需求,Pod的IP大多数情况是不固定的,另一方面,同一组Pod之间也有负载均衡的需要。因此,一组Pod被抽象成一个Service统一向外暴露。Service与其后端Pod副本集群之间则是通过Label Selector实现关联。

Service有以下三种类型:
ClusterIP:提供一个集群内部的虚拟IP(clusterIP),以便在集群内部通过clutserIP:port访问;
NodePort:在每个节点上打开一个端口,在集群外部可以通过nodeIP:nodePort访问,在内部依然可以通过clutserIP:port 访问;
LoadBalancer:通过外部的负载均衡器来访问,多用于公有云上。
Service vs Deployment
Service是从网络角度的抽象概念,类似于Nginx做负载均衡提供的统一网络入口;
Pod是最终的应用部署实体;
Deoplyment 负责创建和保持pod运行状态。
3、Service 的意义
1、部署一个 nginx
kubectl create deployment nginx --image=nginx
2、暴露 nginx 访问
kubectl expose deployment nginx --port=80 --type=NodePort
统一应用访问入口;
Service 管理一组 Pod。
防止 Pod 失联(服务发现)、定义一组 Pod 的访问策略
现在 Service 我们使用 NodePort 的方式暴露,这样访问每个节点的端口,都可以访问到这
个 Pod,如果节点宕机,就会出现问题。
4、labels and selectors

Labels:
Labels 是 Kubernetes 中用于标识对象的键值对。一个 label 是一个 key-value 对,其中 key 是一个字符串,value 可以是任意字符串。一个 Kubernetes 对象可以有多个 labels。例如,一个 Pod 可以有 labels,用于标识它属于哪个应用程序、哪个命名空间、哪个环境等等。
Selectors:
Selectors 是一种用于选择 Kubernetes 对象的标准。在 Kubernetes 中,selectors 通常用于选择一个或多个具有特定 label 的对象。例如,一个 Deployment 可以使用 selectors 来选择哪些 Pod 应该被包含在该 Deployment 中。
在 Kubernetes 中,通常使用 labels 和 selectors 一起来管理和选择对象。例如,一个 Deployment 可以使用 labels 来标识它应该管理哪些 Pod,然后使用 selectors 来选择这些 Pod。

比如上图,一个 Deployment 要求匹配标签为 role=backend,那么拥有 role=backend 标签的 Pod 就将被该 Deployment 管理。
可以使用 Kubernetes 的命令行工具 kubectl 来管理和操作 labels 和 selectors。例如,可以使用 kubectl label 命令来给一个对象添加或删除一个 label。可以使用 kubectl get -l 命令来选择一个或多个具有特定 label 的对象。
比如我们可以通过命令来查看 node 资源的标签:
kubectl get node --show-labels[root@master mtuser]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 5d9h v1.15.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1 Ready <none> 5d9h v1.15.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
通过 describe 命令也可以查看到相关资源的标签:
[root@master mtuser]# kubectl describe pod my-first-deploy-84ffb59778-f7bb2 | grep -i label -A 5
Labels: app=my-first-deploypod-template-hash=84ffb59778
Annotations: <none>
Status: Running
IP: 10.244.0.13
Controlled By: ReplicaSet/my-first-deploy-84ffb59778
可以看到,目前 my-first-deploy 资源创建出来的 Pod 被打上了标签 app=my-first-deploy,这对应了 Deployment 中的定义:
apiVersion: apps/v1
kind: Deployment
metadata:name: my-first-deploy
spec:replicas: 1selector:matchLabels:app: my-first-deploy // 匹配 app=my-first-deploy 的 Pod,加入到 Deployment 中进行管理template:metadata:labels:app: my-first-deploy // 创建出来的 Pod 被打上了标签
...
Deployment 中对 Pod 定义了标签 app=my-first-deploy,同时还需要定义 nodeSelector 匹配的标签 app=my。
5、Ingress
通过 Service 发现 Pod 进行关联。基于域名访
通过 Ingress Controller 实现 Pod 负载均衡
支持 TCP/UDP 4 层负载均衡和 HTTP 7 层负载均衡

步骤:
1)、部署 Ingress Controller
2)、创建 Ingress 规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
spec:
rules: - host: tomcat6.atguigu.com
http:
paths: - backend:
serviceName: tomcat6
servicePort: 80
如果再部署了 tomcat8;看效果;
kubectl create deployment tomcat8 --image=tomcat:8.5.51-jdk8
kubectl expose deployment tomcat8 --port=88 --target-port=8080 --type=NodePort
kubectl delete xxx 删除指定资源
随便配置域名对应哪个节点,都可以访问 tomcat6/8;因为所有节点的 ingress-controller 路
由表是同步的。
6、网络模型
Kubernetes 的网络模型从内至外
由四个部分组成:
1、Pod 内部容器所在的网络
2、Pod 所在的网络
3、Pod 和 Service 之间通信的网
络
4、外界与 Service 之间通信的网
络

4、项目部署
项目部署流程
制作项目镜像(将项目制作为 Docker 镜像,要熟悉 Dockerfile 的编写)
控制器管理 Pod(编写 k8s 的 yaml 即可)
暴露应用
日志监控
相关文章:
3、Dockerfile 深入与其他细节
Dockerfile 在 Docker 中创建镜像最常用的方式,就是使用 Dockerfile。Dockerfile 是一个 Docker 镜像 的描述文件,我们可以理解成火箭发射的 A、B、C、D…的步骤。Dockerfile 其内部包含了一 条条的指令,每一条指令构建一层,因此每…...
大数据之陌陌聊天数据分析案例
目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量,发送和接收用户数 3.…...
03 贝尔曼公式
贝尔曼公式 前言1、Motivating examples2、state value3、Bellman equation:Derivation4、Bellman equation:Matrix-vector form4、Bellman equation:Solve the state value5、Action value 前言 本文来自西湖大学赵世钰老师的B站视频。本节课主要介绍贝尔曼公式。 本节课概要…...
学习视频剪辑:批量添加srt字幕,让视频更生动
随着社交媒体的普及,视频制作变得越来越重要。无论是记录生活,还是分享知识,视频都是一个非常有力的工具。但是,如何让您的视频更生动、更吸引人呢?通过学习视频剪辑,您可以使您的视频更具有吸引力。而在这…...
Windows桌面便签工具推荐使用哪一款?
电脑桌面上张贴便利贴可以将近期需要完成的工作计划逐一添加到便利贴中,电脑桌面悬挂便利贴工具可以督促日常各项事务的完成。当前可悬挂在电脑桌面上的便利贴工具是比较多的,其中桌面小工具便签软件敬业签可满足各行业的办公需求。 建议大家在Windows桌…...
【微信小程序】自定义组件(二)
自定义组件 纯数据字段1、什么是纯数据字段2、使用规则 组件的生命周期1、组件全部的生命周期函数2、组件主要的生命周期函数3、lifetimes节点 组件所在页面的生命周期1、什么是组件所在页面的生命周期2、 pageLifetimes节点3、生成随机的颜色值 纯数据字段 1、什么是纯数据字…...
llinux的更目录下的文件作用和举例
Linux是一种开源的操作系统,其文件系统采用了一种层次化的结构。在Linux文件系统中,最顶层的目录被称为根目录,也就是“/”(斜杠)。在根目录下,有很多文件和目录,它们各自有着不同的作用。本文将…...
20231106_抽象类abstract
抽象类abstract 关键字 abstract运用抽象类抽象方法:修饰抽象类中的某个方法,强制子类重写该方法 归纳 关键字 abstract 对于子类必须要实现特定方法,当时父类无法明确时,可定义为抽象类及抽象方法 不合理: 动物吃东西是基础,在这里写吃的方法过于简单,信息没有实际意义; 怎…...
yolov5 obb旋转框 tensorrt部署
文章目录 1.生成engine文件2.检测图像3.代码yolov5-obb tensorRT部署代码结合王新宇和fish-kong两者的代码,可以多batch批量检测旋转框 yolov5旋转框检测: https://blog.csdn.net/qq_42754919/article/details/134145174 1.生成engine文件 首先需要将pt文件转换成wts文件,…...
http中的Content-Type类型
浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流,需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢?他们具体的使用场…...
【C语法学习】17 - fwrite()函数
文章目录 1 函数原型2 参数3 返回值4 示例 1 函数原型 fwrite():将ptr指向的内存空间中储存的数据块写入与指定流stream相关联的二进制文件中,函数原型如下: size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream)2 参…...
CWE(Common Weakness Enumeration,通用缺陷枚举)
参考链接:https://cwe.mitre.org/ CWE(Common Weakness Enumeration,通用缺陷枚举)和CVE(Common Vulnerabilities & Exposures,通用漏洞和风险)都是在计算机软件安全领域中非常重要的公开数…...
华为政企视频会议产品集
产品类型产品型号产品说明 maintainProductCloudMCU基础版-ARM华为CloudMCU是为面向云化需求而推出的功能强大的企业云通信融合媒体平台。融合视频、音频和数据等多种媒体内容,接入从会议室到个人PC、手机等设备,实现统一无缝的沟通协作。maintainProduc…...
IntelliJ IDEA 2022创建Maven项目
IntelliJ IDEA 2022创建Maven项目 点击New Project 配置一下下 (1). 选择Maven Archetype (2). 输入Name就是你的项目名称 (3). 输入Location是你的项目保存目录 (4). 选择JDK (5). 选择Catalog一般默认选择Internal即可 在Archetype这里我们选择一个模板来创建Maven项目 …...
有限域的Fast Multiplication和Modular Reduction算法实现
1. 引言 关于有限域的基础知识,可参考: RISC Zero团队2022年11月视频 Intro to Finite Fields: RISC Zero Study Club 有限域几乎是密码学中所有数学的基础。 ZKP证明系统中的所有运算都是基于有限域的: 使用布尔运算的数字电路…...
第八章:security testing
文章目录 Security Testingbuffer overflow 的例子Fuzzing 测试Random Testing好处坏处Mutation-based Fuzzing好处坏处Generation-based Fuzzing好处坏处Memory DebuggerUndefined Behaviors (未定义行为)Security Testing 渗透测试(或称为pentesting)是指攻击软件以寻找安…...
Linux系统下一些配置建议整理
1. 【推荐】高并发服务器建议调小 TCP 协议的 time_wait 超时时间。 说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 time_wait 的连接数太多,可能无法建立新的…...
【launch文件中如何启动gdb调试单个节点多个节点】
文章目录 调试多个节点在ROS中,如果需要用gdb调试节点,你可以在.launch文件中添加相关的参数。以下是一个例子,展示如何为一个节点启动gdb调试: <launch><node pkg="your_package" type="your_node...
Unity中Shader的GI的直接光实现
文章目录 前言一、在上一篇文章中,得到GI相关数据后,需要对其进行Lambert光照模型计算二、在准备好上面步骤后,我们需要准备缺少的数据1、准备上图中的 s.Normal2、准备上图中的 s.Albedo 前言 Unity中Shader的GI的直接光实现,基…...
JAVA进程和线程
哈喽~大家好呀,这篇来看看JAVA进程和线程。 🥇个人主页:个人主页 🥈 系列专栏:【日常学习上的分享】 🥉与这篇相关的文章: Redis快速入…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
