使用podman管理容器

目录

1.安装及配置podman 

 2.镜像的命名

 3.对镜像重新做标签

4.删除镜像 

 5.查看镜像的层结构

6.导出和导入镜像 

7.创建容器

8.创建一个简单的容器 

 9.容器的生命周期

 10.创建临时容器

11.指定容器中运行的命令 

12.创建容器时使用变量 


对于初学者来说,不太容易理解什么是容器,这里举一个例子。想象一下,我们把系统安装在一个U盘中,此系统中安装好了MySQL。
然后我们把这个U盘插人一台正在运行的物理机上,这个物理机上并没有安装MySQL,如图27-1所示。
然后把U盘中的mysqld进程“曳”到物理机上运行。但是这个mysqld进程只能适应U盘中的系统,不一定能适应物理机上的系统。所以,我们找一个类似气球的东西把 mysqld进程在物理机中包裹保护起来,这个mysqld进程依然适应U盘中的生态环境(系统),却可以从物理机上吸收CPU和内存作为维持mysqld进程运行的“养分”。

那么,这个类似气球的东西就是容器,U盘就是镜像。  

在Linux中安装软件包时经常会遇到各种包依赖,或者有人不会在 Linux系统(如Ubuntu、CentOS)中安装软件包。这样以后我们就不需要安装和配置MySQL了,直接把这个“U盘”插到电脑上,然后运行一个容器出来,这样就有MySQL这个服务了。

所谓镜像,就是安装了系统的硬盘文件,这个系统中安装了想要运行的程序,如 MySQL.Nginx,并规定好使用这个镜像所生成的容器
里面运行什么进程。这里假设有一个安装了MySQL的镜像,如图27-2所示。

在服务器上有一个MySQL 的镜像(已经安装好了MySQL),然后使用这个镜像生成一个容器。这个容器中只运行一个mysqld进程,容器中的mysqld进程直接从物理机上吸收CPU和内存以维持它的正常运行。
以后需要什么应用,就直接拉取什么镜像下来,然后使用这个镜像生成容器。例如,需要对外提供MySQL服务,那么就拉取一个MySQL镜像,然后生成一个MySQL容器。如果需要对外提供 Web服务,那么就拉取一个Nginx镜像,然后生成一个Nginx容器。
一个镜像是可以生成很多个容器的,如图27-3所示。

1.安装及配置podman 

前面已经配置了yum源,所以这里直接使用yum install podman -y命令安装,命令如下。  

[root@RHEL813 ~]# yum -y install podman

 查看现在系统中有多少镜像,命令如下。

[root@RHEL813 ~]# podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[root@RHEL813 ~]# 

 没有任何输出,说明现在还没有镜像。

查看系统中有多少容器,命令如下。  

[root@RHEL813 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@RHEL813 ~]# 

 没有任何输出,说明当前没有容器。

如果要拉取镜像,一般是从国外网站的镜像仓库中拉取,速度会很慢。默认podman从以下仓库中拉取镜像:registry.access.redhat.comregistry.redhat.iodocker.io。下面配置加速器,提高从docker.io中拉取镜像的速度。
登录阿里云控制台,找到容器镜像服务,单击镜像工具→镜像加速器,找到自己的加速器地址,这里使用的是https://XXXX.mirror.aliyuncs.com.

修改 podman 的配置文件/etc/containers/registries.conf,修改内容如下。 

unqualified‐search‐registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "/XXXX.mirror.aliyuncs.com"
(XXXX指的是用你自己的aliyun镜像加速器)
这里的意思是从 docker.io中拉取镜像时使用加速器XXXX.mirror.aliyuncs.com,注意这里不需要加https,配置好之后不需要重启什么服务

下面开始拉取docker.io/nginx镜像,命令如下。 

[root@RHEL813 ~]# podman pull docker.io/nginx

拉取Mysql的镜像,命令如下。

[root@RHEL813 ~]# podman pull mysql
网易仓库地址是https://c.163yun.com/hub#/home,在浏览器中打开此界面需要登录,然后搜索需要的镜像即可。下面从网易仓库中
拉取 CentOS镜像,命令如下。
[root@RHEL813 ~]# podman pull  hub.c.163.com/library/centos
Trying to pull hub.c.163.com/library/centos:latest...
Getting image source signatures
Copying blob a3ed95caeb02 done  
Copying blob a3ed95caeb02 done  
Copying blob 2409c3878ba1 done  
Writing manifest to image destination
Storing signatures
328edcd84f1bbf868bc88e4ae37afe421ef19be71890f59b4b2d8ba48414b84d

 2.镜像的命名

一般情况下,镜像的命名格式如下。  

服务器IP: 端口 /分类 /镜像名 :tag

 如果不指定端口则默认80,如果不指定 tag则默认latest

例如,192.168.26.101:5000/cka/centos:v2。 

 再如,hub.c.163.com/library/mysql:latest。

分类也是可以不写的,如docker.io/nginx:latest。 

在把镜像上传(push)到仓库时,镜像必须按这种格式命名,因为仓库地址就是由镜像前面的IP决定的。如果只是在本机使用镜像,命名可以随意。

 查看当前系统有多少镜像,命令如下

[root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 

 3.对镜像重新做标签

 如果想给本地已经存在的镜像起一个新的名称,可以用tag来做,语法如下

podman tag 旧的镜像名 新的镜像名

 tag之后,新的镜像名和旧的镜像名是同时存在的。

步骤①:给镜像做新标签,命令如下。 

[root@RHEL813 ~]# podman tag docker.io/library/nginx 192.168.103.17/rhce/nginx:v2
[root@RHEL813 ~]# 
这里是为docker.io/library/nginx1重新做个tag,名称192.168.103.17/rhce/nginx,标签为2,这样命名的目的是让大家看到命名的随意性,建议tag 可以设置为版本号、日期等有意义的字符。

 步骤②:再次查看镜像,命令如下。

[root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      61395b4c586d  2 months ago   191 MB
192.168.103.17/rhce/nginx     v2          61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 
可以看到,对某镜像做了标签之后,看似是两个镜像,其实对应的是同一个(这类似于Linux中硬链接的概念,一个文件两个名称而已),镜像ID都是一样的。删除其中一个镜像,是不会删除存储在硬盘上的文件的,只有把 IMAGE ID所对应的所有名称全部删除,才会从硬盘上删除。

4.删除镜像 

如果要删除镜像,需要按如下语法来删除。  

podman rmi 镜像名:tag

 例如,下面要把 docker.io/library/nginx:latest删除。

步骤①:删除镜像,命令如下。 

[root@RHEL813 ~]# podman rmi docker.io/library/nginx:latest 
Untagged: docker.io/library/nginx:latest
[root@RHEL813 ~]# 

 可以看到,只是简单的一个Untagged操作,并没有任何Deleted操作。

步骤②:查看镜像,命令如下。 

root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
192.168.103.17/rhce/nginx     v2          61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 
可以看到,61395b4c586d对应的本地文件依然是存在的,因为(ID61395b4c586d)有两个名称,现在只是删除了一个名称而已,所以在硬盘上仍然是存在的。

只有删除最后一个名称,本地文件才会被删除。 

步骤③:删除镜像,命令如下 

[root@RHEL813 ~]# podman rmi 192.168.103.17/rhce/nginx:v2 
Untagged: 192.168.103.17/rhce/nginx:v2
Deleted: 61395b4c586da2b9b3b7ca903ea6a448e6783dfdd7f768ff2c1a0f3360aaba99
[root@RHEL813 ~]# 

 5.查看镜像的层结构

虽然我们所用的镜像都是从网上下载下来的,但这些镜像在制作过程中都是一点点修改、一步步做出来的。如果我们要看某镜像的这些步骤,可以用podman history命令,语法如下。
podman history镜像名
查看镜像的结构,命令如下。
[root@RHEL813 ~]# podman history hub.c.163.com/library/centos
ID            CREATED      CREATED BY                                     SIZE        COMMENT
328edcd84f1b  6 years ago  /bin/sh -c #(nop)  CMD ["/bin/bash"]           0 B         
<missing>     6 years ago  /bin/sh -c #(nop)  LABEL name=CentOS Base ...  0 B         
<missing>     6 years ago  /bin/sh -c #(nop) ADD file:63492ba809361c5...  200 MB      
[root@RHEL813 ~]# 

 最上层的CMD,定义的是当使用这个镜像生成的容器时,运行的进程为/bin/bash。

6.导出和导入镜像 

一些服务器是无法连接到互联网的,所以无法从互联网上下载镜像。在还没有私有仓库的情况下,如何把现有的镜像传输到其他机器上呢?这里就需要把本地已经pull下来的镜像导出为一个本地文件,这样就可以很容易地传输到其他机器。导出镜像的语法如下。

 步骤①:把docker.io/nginx:latest 导出为nginx.tar,命令如下。

[root@RHEL813 ~]# podman save docker.io/library/nginx:latest > nginx.tar
[root@RHEL813 ~]# ls
163mysql.tar  anaconda-ks.cfg  flink  initial-setup-ks.cfg  mysql  nginx  nginx.tar  tomcat

 既然上面已经把镜像导出为一个文件了,那么需要把这个文件导入,语法如下。

podman load ‐i file.tar

 步骤②:把nginx.tar导入为镜像,命令如下。

[root@RHEL813 ~]# podman load -i nginx.tar 
Getting image source signatures
Copying blob a7e2a768c198 skipped: already exists  
Copying blob eb7e3384f0ab skipped: already exists  
Copying blob d310e774110a skipped: already exists  
Copying blob ea43d4f82a03 skipped: already exists  
Copying blob 1dc45c680d0f skipped: already exists  
Copying blob 9c6261b5d198 [--------------------------------------] 0.0b / 0.0b
Copying blob d26d4f0eb474 [--------------------------------------] 0.0b / 0.0b
Copying config 61395b4c58 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/nginx:latest
[root@RHEL813 ~]# 

 查看现有镜像,命令如下。

[root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 

7.创建容器

容器就是镜像在宿主机上运行的一个实例,大家可以把容器理解为一个气球,气球中运行了一个进程,这个进程透过气球吸收物理机的内存和 CPU 资源。

 查看当前有多少正在运行的容器,命令如下。

[root@RHEL813 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@RHEL813 ~]# 

 这个命令显示的仅仅是正在运行的容器,如果要查看不管是运行还是不运行的容器,需要加上-a选项,即 podman ps-a。

8.创建一个简单的容器 

运行一个最简单的容器,命令如下。 

[root@RHEL813 ~]# podman run hub.c.163.com/library/centos
[root@RHEL813 ~]# podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED       STATUS                   PORTS       NAMES
3c7b68e2106e  hub.c.163.com/library/centos:latest  /bin/bash   1 second ago  Exited (0) 1 second ago              stoic_newton
[root@RHEL813 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@RHEL813 ~]# 
可以看到,创建了一个容器,容器ID为3c7b68e2106e,容器名是随机产生的,名称为kind_elgamal,所使用的镜像是hub.c.163.com/library/centos,容器中运行的进程为/bin/bash(也就是镜像中的CMD指定的)。

 podman ps看不到,podman ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运行的一瞬间就关闭了,为什么?

 9.容器的生命周期

把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,肉体也就宕机了,只有灵魂正常运行,肉体才能正常运行,如图27-4所示。

同理,只有容器中的进程正常运行,容器才能正常运行,容器中的进程宕机了,容器也就宕机了。因为没有终端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了。
如果把这个bash附着到一个终端上,这个终端一直存在,bash就一直存在,那么是不是容器就能一直存活了呢?

删除容器的语法如下。 

podman rm 容器ID/容器名

 如果删除正在运行的容器,可以使用-f选项。

podman rm ‐f 容器ID/容器名 
步骤①:删除刚才的容器,命令如下。
[root@RHEL813 ~]# podman rm 3c7b68e2106e
3c7b68e2106ee6ef4fc8035e69317afd6824d9946a4c428fb4671eb802dc2c08
[root@RHEL813 ~]# 

 重新创建新的容器,加上-i -t选项,可以写作-it或-i-t。

(1)-t:模拟一个终端。
(2)-i:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了。

 步骤②:创建一个容器,命令如下。

[root@RHEL813 ~]# podman run -it hub.c.163.com/library/centos
[root@ce50a82b439c /]# exit
exit
[root@RHEL813 ~]# 

 创建好容器之后就自动进入容器中了,可以通过exit退出容器,命令如下

[root@RHEL813 ~]# podman ps -q
[root@RHEL813 ~]# 
[root@RHEL813 ~]# podman ps -aq
ce50a82b439c
[root@RHEL813 ~]# 

 但是一旦退出容器,容器就不再运行了。

步骤③:删除此容器,命令如下。 

[root@RHEL813 ~]# podman rm -f ce50a82b439c
ce50a82b439cdc40ff60178349975f2ee07f96f893868ab65b180df80c4a7887
[root@RHEL813 ~]# 

 如果希望创建好容器之后不自动进入容器中,可以加上-d选项。

步骤④:再次创建一个容器,命令如下。  

[root@RHEL813 ~]# podman run -dit hub.c.163.com/library/centos
8629a9e5a8d5191ca38d7ed7f8f4a427ec14b0e5dd58892a04ab74f44c9a0d0d
[root@RHEL813 ~]# 

 因为加了-d选项,所以创建好容器之后并没有自动进入容器中。进入此容器中,命令如下。

[root@RHEL813 ~]# podman attach 8629a9e5a8d5
[root@8629a9e5a8d5 /]# exit
exit

[root@RHEL813 ~]# podman ps -q
[root@RHEL813 ~]# 
[root@RHEL813 ~]# podman ps -aq
8629a9e5a8d5
[root@RHEL813 ~]# 

 可以看到,只要退出来容器就会自动关闭。

步骤⑤:删除此容器,命令如下。 

[root@RHEL813 ~]# podman rm 8629a9e5a8d5
8629a9e5a8d5191ca38d7ed7f8f4a427ec14b0e5dd58892a04ab74f44c9a0d0d
[root@RHEL813 ~]# 

 在运行容器时加上--restart=always选项可以解决退出容器自动关闭的问题。

步骤6:创建容器,增加--restart=always选项,命令如下。 

[root@RHEL813 ~]# podman run -dit --restart=always hub.c.163.com/library/centos
7713104e87c28bedeee3f18ff6d3220d51ef0bb320dc37a71e5dbb4476b66834
[root@RHEL813 ~]# 

 进入容器并退出,命令如下。

[root@RHEL813 ~]# podman ps -q
7713104e87c2
[root@RHEL813 ~]# podman attach 7713104e87c2
[root@7713104e87c2 /]# exit
exit

[root@RHEL813 ~]# podman ps -q
7713104e87c2
[root@RHEL813 ~]# 

 可以看到,容器依然是存活的。

步骤⑦:删除此容器,因为容器是运行的,所以需要加上-f选项,命令如下。 

[root@RHEL813 ~]# podman ps -q
7713104e87c2
[root@RHEL813 ~]# podman rm -f 7713104e87c2
7713104e87c28bedeee3f18ff6d3220d51ef0bb320dc37a71e5dbb4476b66834
[root@RHEL813 ~]# 

 每次删除容器时,都要使用容器ID,这种方式比较麻烦,在创建容器时可以使用--name选项指定容器名。

步骤⑧:创建容器,使用--name 选项指定容器的名称。  

[root@RHEL813 ~]# podman run -dit --restart=always --name=c1 hub.c.163.com/library/centos
14df0508ff3debda3c74d1d5721b00b5c46b7098224db66595e196fe73da0c0c
[root@RHEL813 ~]# 

 这样容器的名称为c1,以后管理起来比较方便,如切换到容器,然后退出,命令如下

[root@RHEL813 ~]# podman attach c1
[root@14df0508ff3d /]# 
[root@14df0508ff3d /]# exit
exit

[root@RHEL813 ~]# 

 步骤⑨:删除此容器,命令如下。

[root@RHEL813 ~]# podman rm -f c1
14df0508ff3debda3c74d1d5721b00b5c46b7098224db66595e196fe73da0c0c
[root@RHEL813 ~]# podman ps -aq
[root@RHEL813 ~]# 

 10.创建临时容器

如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上--rm选项。
创建临时容器,命令如下。
[root@RHEL813 ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos
[root@05621e47c754 /]# exit
exit
[root@RHEL813 ~]# 

 创建容器时加了 --rm选项,退出容器之后容器会被自动删除

[root@RHEL813 ~]# podman ps -aq
[root@RHEL813 ~]# 

 可以看到,此容器被自动删除了,注意--rm和--restart=always选项不可以同时使用。

11.指定容器中运行的命令 

创建容器时,容器中运行的是什么进程,都是由镜像中的CMD指定的。如果想自定义容器中运行的进程,可以在创建容器的命令最后指定,如下所示。
[root@RHEL813 ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos sh
sh-4.2# 
sh-4.2# exit
exit
[root@RHEL813 ~]# 
这里就是以sh的方式运行,而不是以 bash的方式运行。

12.创建容器时使用变量 

在利用一些镜像创建容器时需要传递变量,例如,使用MySQL 的镜像、WordPress的镜像创建容器时都需要通过变量来指定一些必备的信息。需要变量用-e选项来指定,可以多次使用-e选项来指定多个变量。
[root@RHEL813 ~]# podman run -it --name=c1 --rm -e aa=123 -e bb=456 hub.c.163.com/library/centos
[root@9443e66a6a5b /]# echo $aa
123
[root@9443e66a6a5b /]# echo $bb
456
[root@9443e66a6a5b /]# exit
exit
[root@RHEL813 ~]# 
在创建容器时,通过-e选项指定了两个变量aa和 bb,然后进入容器之后可以看到具有这两个变量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法---分类

当然&#xff0c;让我为您提供更详细的机器学习算法介绍&#xff0c;重点在于每种算法的原理、优缺点&#xff0c;并在注意事项中特别提到它们对非平衡数据和高维稀疏数据的适应性。 1. 决策树&#xff08;Decision Trees&#xff09; 原理&#xff1a; 决策树通过学习简单的…

【动态规划】路径问题_不同路径_C++

题目链接&#xff1a;leetcode不同路径 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求总共有多少条不同的路径可到达右下角&#xff1b; 由题可得&#xff1a; 机器人位于…

C# 字符串格式化

写在前面 在日常编程中&#xff0c;经常需要对字符串进行格式化操作&#xff0c;以便呈现为不同的格式&#xff0c;满足各种各样的显示需求&#xff0c;C#的字符串格式化参数是非常丰富的&#xff0c;这里做个简单的列举&#xff0c;以供后续参考和延伸。 代码实现 var curr…

WPF 显示PDF、PDF转成图片

1.NuGet 安装 O2S.Components.PDFView4NET.WPF 2.添加组件 工具箱中&#xff0c;空白处 右键&#xff0c;选择项 WPF组件 界面&#xff0c;选择NuGet安装库对面路径下的 O2S.Components.PDFView4NET.WPF.dll 3.引入组件命名空间&#xff0c;并使用 <Windowxmlns"htt…

关于ctf反序列化题的一些见解([MRCTF2020]Ezpop以及[NISACTF 2022]babyserialize)

这里对php反序列化做简单了解 在PHP中&#xff0c;序列化用于存储或传递 PHP 的值的过程中&#xff0c;同时不丢失其类型和结构。 serialize&#xff08;&#xff09; 函数序列化对象后&#xff0c;可以很方便的将它传递给其他需要它的地方&#xff0c;且其类型和结构不会改变…

nvm--node版本管理详细安装和使用教程

1&#xff09;nvm是什么? nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nodejs是项目开发时所需要的代码库&#xff0c;nvm是nodejs版本管理工具&#xff0c;npm是nodejs包管理工具&#xff1b;nodejs能够使得javascript能够脱离浏览器运…

PyCharm连接远程服务器

要求&#xff1a;PyCharm专业版才支持远程服务 一、创建远程连接 先建立本地与远程服务器之间的SSH连接 1、配置连接 2、建立SSH连接&#xff0c;选择文件传输协议 SFTP 3、设置服务器名&#xff08;可以随意命名&#xff09; 4、配置 SSH连接 点击 172.18.1.202 配置…

Python爬取旅游网站热门景点信息的技术性文章

目录 一、引言 二、准备工作 三、爬取热门景点信息 1、分析网页结构 2、发送HTTP请求 3、解析HTML文档 4、提取所需信息 5、保存数据到文件或数据库 四、优化爬虫程序性能和效率 五、异常处理与日志记录 1、异常处理 2、日志记录 六、安全性与合法性考虑 七、总结…

【EI会议征稿】第五届机械仪表与自动化国际学术会议(ICMIA 2024)

第五届机械仪表与自动化国际学术会议&#xff08;ICMIA 2024&#xff09; The 5th International Conference on Mechanical Instrumentation and Automation 2024年第五届机械仪表与自动化国际学术会议&#xff08;ICMIA 2024&#xff09;定于2024年4月5-7日在中国武汉隆重…

Node.js 的适用场景

目录 前言 适用场景 1. 实时应用 用法 代码 理解 代码示例 理解 3. 微服务架构 用法 代码示例 理解 总结 前言 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它使得 JavaScript 可以脱离浏览器运行在服务器端。Node.js 的出现极大地扩展…

flink源码分析之功能组件(五)-高可用组件

简介 本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。 本文解释高可用组件,包括两项服务,主节点选举和主节点变更通知* 高可用服务常见有两…

23.Java程序设计--基于SSM框架的移动端家庭客栈管理系统的设计与实现

第一章&#xff1a;引言 1.1 背景 客栈业务背景移动端应用需求增长趋势 1.2 研究动机 移动端管理系统的需求SSM框架的选择和优势 1.3 研究目的与意义 提高家庭客栈管理效率移动端解决方案的创新 第二章&#xff1a;相关技术和理论综述 2.1 SSM框架简介 Spring框架Spri…

翻译: ChatGPT Token消耗粗略计算英文就是除以四分之三

在这个视频中&#xff0c;我想带你快速浏览一些例子&#xff0c;以建立对在软件应用中使用大型语言模型的实际成本的直观感受。让我们来看看。这是一些示例价格&#xff0c;用于从不同的大型语言模型获取提示和回应&#xff0c;这些模型对开发者可用。即&#xff0c;如果你在你…

基于vue实现的疫情数据可视化分析及预测系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

flink中如何把DB大表的配置数据加载到内存中对数据流进行增强处理

背景 在处理flink的数据流时&#xff0c;比如处理商品流时&#xff0c;一般我们从kafka中只拿到了商品id&#xff0c;此时我们需要把商品的其他配置信息比如品牌品类等也拿到&#xff0c;此时就需要关联上外部配置表来达到丰富数据流的目的&#xff0c;如果外部配置表很大&…

gitlab下载安装

1.下载 官网rpm包 gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像 Index of /gitlab-ce/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装 rpm -ivh gitlab-ce-16.4.3-ce.0.el7.x86_64.rpm 3.配置 vim /etc/gitlab/gitlab.rb 将 externa…

【rabbitMQ】Exchanges交换机

上一篇&#xff1a;springboot整合rabbitMQ模拟简单收发消息 https://blog.csdn.net/m0_67930426/article/details/134904766 本篇代码基于上一篇继续写 目录 Fanout 交换机 1. add queue 2. add Exchange 3.绑定队列 Direct 交换机 1. add queue 2. add Exchange 3.…

Day60力扣打卡

打卡记录 1682分了记录下&#xff0c;希望下回能突破1700捏。作为一个菜鸟&#xff0c;知道自己很菜&#xff0c;一步步走到现在还是很开心的&#xff0c;从以前的周赛稳定1题到稳定2题&#xff0c;到现在的时有时无的3题。每次刷题都期盼有所长进&#xff0c;虽然更多的时候收…

如何看待「前端已死论」?

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【深度学习目标检测】四、基于深度学习的抽烟识别(python,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…