Java使用Transactional注解propagation属性
Java使用Transactional注解propagation属性
Docker关闭后里面的东西还在吗?
当我们关闭Docker容器时,容器中的内容和更改是否会保留呢?答案是:取决于我们如何关闭容器。
当我们通过docker stop
命令正常关闭容器时,Docker会尝试优雅地关闭容器,即向容器中的进程发送SIGTERM
信号并等待一段时间,以便进程完成清理工作。在这种情况下,容器中的文件更改将会被保留。
下面是一个示例,演示了如何正常关闭一个Docker容器:
在某些情况下,我们可能需要强制关闭容器,例如容器中的进程无响应或无法正常关闭。在这种情况下,我们可以使用docker kill
命令来强制关闭容器。当我们强制关闭容器时,容器中的文件更改可能会丢失。
下面是一个示例,演示了如何强制关闭一个Docker容器:
如果你希望容器关闭后的内容仍然保留,你可以使用Docker数据卷。数据卷是宿主机上的一个目录或文件,可以被Docker容器挂载并访问。通过将容器中的数据存储在数据卷中,我们可以确保即使容器被删除,数据仍然保留在宿主机上。
下面是一个示例,演示了如何使用数据卷来持久化数据:
在上面的示例中,/path/on/host
是宿主机上的目录,/path/in/container
是容器中的目录,image_name
是要使用的镜像名称。
另一种方式是将容器导出为一个镜像文件,这样我们可以在需要时重新导入容器。使用docker export
命令可以导出一个容器。
下面是一个示例,演示了如何导出和导入一个容器:
在上面的示例中,output.tar
是导出的镜像文件,container_name
是要导出的容器名称,image_name
是导入时使用的镜像名称。
在正常关闭Docker容器时,容器中的文件更改将会被保留。然而,在强制关闭容器时,容器中的文件更改可能会丢失。为了持久保存容器中的数据,可以使用数据卷或导出容器为镜像文件。
希望本文能为您解答关于Docker关闭后内容保留的疑惑。通过合理使用Docker的停止和持久化机制,您可以更好地管理和维护您的容器化应用程序。
以下是一个使用数据卷的简单代码示例:
Go语言例子:Json Tag 默认值
type Test struct {k8s查看CNI配置文件
在k8s的节点上,查看CNI配置文件来了解CNI插件的具体配置。通常CNI配置文件存储在`/etc/cni/net.d/`目录下,你可以使用以下命令查看:查看Docker仓库地址命令
要查看Docker的仓库地址,可以使用Docker命令行工具提供的docker info
命令。该命令可以显示Docker的系统信息,其中包括仓库地址。
下面是示例代码:
执行上述命令后,你会看到类似以下的输出:
在输出中,Registry
字段显示了Docker的仓库地址。在这个示例中,仓库地址是:https://hub.docker.com/
也有可能输出的 Registry Mirrors(国内官方仓库不稳定,配置了国内镜像仓库地址):
Registry Mirrors:
https://hub-mirror.c.163.com/
https://g7s7up11.mirror.aliyuncs.com/
https://mirror.baidubce.com/
k8s踩过的3个比较大的坑
1: Pod无法正常启动
当Pod无法正常启动时,首先需要检查Pod的配置是否正确,例如镜像地址、端口映射等。接下来可以查看Pod的日志来了解具体的错误信息。2: 服务无法访问
如果服务无法访问,可以首先检查Service的配置是否正确,确保Service和Pod在同一个命名空间内,并且端口号配置正确。另外,还需要确保网络能够正常连接到Pod。3. 资源耗尽
当K8S集群资源不足时,可能会导致Pod无法正常启动或者运行。可以通过kubectl top nodes命令查看节点资源使用情况,并调整资源配置以适应实际需求。map 指令介绍
map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。
map 的主要作用是创建自定义变量,通过使用 nginx 的内置变量,去匹配某些特定规则,如果匹配成功则设置某个值给自定义变量。 而这个自定义变量又可以作于他用。
$args 是nginx内置变量,就是获取的请求 url 的参数。 如果 $args 匹配到 debug 那么 $foo 的值会被设为 1 ,如果 $args 一个都匹配不到 $foo 就是default 定义的值,在这里就是 0
1、default : 指定源变量匹配不到任何表达式时将使用的默认值。当没有设置 default,将会用一个空的字符串作为默认的结果。
2、hostnames : 允许用前缀或者后缀掩码指定域名作为源变量值。这个参数必须写在值映射列表的最前面。
3、include : 包含一个或多个含有映射值的文件。
map 的 var2 是自定义变量。 $var2 的值取决于 $var1 在对应表达式的匹配情况。 如果一个都匹配不到则 $var2 就是 default 对应的值。
注意:不能在map块里面引用命名捕获或位置捕获变量。如~^/qupeicom/(.*) /peiyin/$1; 这样会报错nginx: [emerg] unknown variable
注意二:如果源变量值包含特殊字符如‘~’,则要以‘\’来转义。
K8s查看使用的是containerd引擎还是docker引擎
首先,你需要通过命令行工具连接到Kubernetes集群。可以使用kubectl
命令行工具连接到集群。请确保已经安装了kubectl,并配置好了Kubernetes集群的连接信息。执行以下命令连接到集群:
其中,context-name
是Kubernetes集群的上下文名称,可以通过kubectl config get-contexts
命令查看可用的上下文。
接下来,你需要获取Kubernetes集群的节点信息。执行以下命令获取节点信息:
这将显示集群中所有节点的名称和状态。
最后,你需要查看每个节点上使用的容器运行时引擎。执行以下命令获取容器运行时信息:
其中,node-name
是节点的名称,可以从步骤2中获取。这个命令会输出节点上使用的容器运行时引擎信息,如果包含"docker"关键词,则表示使用的是Docker引擎;如果包含"containerd"关键词,则表示使用的是containerd引擎。
以下是上述步骤中涉及的代码示例及其解释:
这行代码用于连接到Kubernetes集群,其中<context-name>
是Kubernetes集群的上下文名称。
这行代码用于获取Kubernetes集群中所有节点的信息。
这行代码用于查看指定节点上使用的容器运行时引擎信息,其中<node-name>
是节点的名称。
K8S系列:RC、RS、Deployment区别
RC->RS->Deployment
在早期Kubernetes版本里是没有这么多Pod副本控制器的,只有一个Pod副本控制器RC(Replication Controller)
之前RC的标签选择器只能选择一个标签,而ReplicaSet拥有集合式的标签选择器,可以选择多个Pod标签。
Deployment是通过ReplicaSet来实现Pod副本自动控制功能的。
官方的建议
不使用底层的ReplicaSet来控制Pod副本,而应该通过管理ReplicaSet的Deployment对象来控制副本。
MongoDB支持索引种类
MongoDB和其他DBMS一样,也支持索引机制,可以通过索引优化查询,避免全表扫描。MongoDB支持多种索引。
从以上可以看出,MongoDB与MySQL类似,MySQL支持的索引MongoDB也几乎都支持,而且MongoDB索引同样是使用b+树存储。不过与MySQL不同的时,MongoDB建立索引的时候,可以指定正序还是逆序。
这是MongoDB的默认索引,每个文档插入集合时,都会自动生成一个_id字段,MongoDB在该字段上创建唯一索引。与MySQL的主键概念类似,插入文档时可以手动指定,也可以由MongoDB的ObjectID自动生成,如果手动指定重复,则插入失败。
MongoDB为集合文档上的任意一个字段都可以创建索引,可以指定升序或者降序。包括
与MyQSL类似,MongoDB也支持组合索引,可以对文档的多个字段创建一个组合索引,多个字段的顺序很重要,底层存储按照前后顺序排列,同样满足最左前缀匹配原则。
例如创建userId-name两个字段的索引,可以匹配userId的查询,也可以匹配userId-name的查询,但无法匹配name或者name-userId的查询。
创建组合索引时同样可以手动指定按照升序还是降序排列,在普通索引时,升序还是降序不重要,因为MongoDB可以在任一方向遍历索引,而组合索引字段的升序还是降序会影响排序是否走索引。
例如创建name升序-age降序的组合索引,当遇到name升序-age降序的查询和name降序-age升序的查询都可以走索引,而遇到name升序-age升序或者name降序-age降序的查询时则无法走索引。即查询的每个字段顺序必须要与索引排序一致或都相反,这样MongoDB会选择从正向遍历索引或者反向遍历索引从而走索引查询。
为保存数组值的字段建立索引,MongoDB为数组中的每个元素创建一个索引。这些多键索引支持对数组字段的有效查询。可以在既包含标量值(例如字符串,数字)又包含嵌套文档的数组上构造多键索引。
需要注意的是分片键不能是多键索引,Hash索引也不能多键,多键索引也不能对数组覆盖查询。
现在大多数软件开发都与地理位置有关,例如美团,滴滴的定位等LBS相关项目,一般存储每个地点的经纬度的坐标,如果想要查询周围场所,则需要建立索引提高效率。
MongoDB在1.4版本引入了地理空间索引。MongoDB支持两种地理空间索引:
MongoDB也提供了一种text索引类型,类似于MySQL的全文索引,该类型支持在集合中搜索字符串内容。
相比于B+树logn的查询时间复杂度,哈希的O(1)时间复杂度更适合查询,而由于Hash不适合范围查询的特性,导致目前主流存储数据结构采用b+树。但与MqSQL类似,MongoDB同样提供了哈希索引。
MongoDB为了支持基于散列的分片,MongoDB提供了一种散列索引类型,该索引类型对字段值的散列进行索引。这些索引在其范围内具有更随机的值分布,但仅支持相等匹配,而不能支持基于范围的查询。
部分索引仅索引集合中符合指定过滤器表达式的文档。通过索引集合中文档的子集,部分索引具有较低的存储需求,并降低了索引创建和维护的性能成本。
创建部分索引时,还需要指定过滤表达式,只为符合条件的数据创建索引,可以有效减少冷数据索引的存储空间和维护。
索引的稀疏属性可确保索引仅包含具有索引字段的文档的条目。索引会跳过没有索引字段的文档。
您可以将稀疏索引选项与唯一索引选项结合使用,以防止插入索引字段具有重复值的文档,并跳过缺少索引字段的索引文档。
TTL索引是MongoDB可以使用的特殊索引,可以在一定时间后自动从集合中删除文档。对于某些类型的信息(例如机器生成的事件数据,日志和会话信息),它们仅需要在数据库中保留有限的时间,这是理想的选择。
与MySQL一样,MongoDB同样支持覆盖索引,即查询结果被索引覆盖,查询速度就会提升很多,因为这样数据可以直接从索引拿,不用再次回表查询。
索引交集是MongoDB在2.6版的新功能。
MongoDB可以使用索引的交集来完成查询。对于指定复合查询条件的查询,如果一个索引可以满足查询条件的一部分,而另一个索引可以满足查询条件的另一部分,则MongoDB可以使用两个索引的交集来满足查询。使用复合索引还是使用索引交集是否更有效取决于特定查询和系统。