当前位置: 首页 > news >正文

自助建站哪个网站好/网站一级域名和二级域名

自助建站哪个网站好,网站一级域名和二级域名,动画视频制作软件app,关于网站开发的商业计划书本章主要介绍使用 podman 管理容器。 了解什么是容器,容器和镜像的关系 安装和配置podman 拉取和删除镜像 给镜像打标签 导出和导入镜像 创建和删除镜像 数据卷的使用 管理容器的命令 使用普通用户管理容器 使用普通用户管理容器 对于初学者来说,不太容…
本章主要介绍使用 podman 管理容器。
  • 了解什么是容器,容器和镜像的关系
  • 安装和配置podman
  • 拉取和删除镜像
  • 给镜像打标签
  • 导出和导入镜像
  • 创建和删除镜像
  • 数据卷的使用
  • 管理容器的命令
  • 使用普通用户管理容器
使用普通用户管理容器
对于初学者来说,不太容易理解什么是容器,这里举一个例子。想象一下,我们把系统安装在一个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所示。
27.1 安装及配置podman
前面已经配置了yum源,所以这里直接使用yum install podman -y命令安装,命令如下。
[root@pp ~]# yum -y install podman
查看现在系统中有多少镜像,命令如下。
[root@pp ~]# podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[root@pp ~]# 
查看系统中有多少容器,命令如下。
[root@pp ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@pp ~]# 
没有任何输出,说明当前没有容器。 如果要拉取镜像,一般是从国外网站的镜像仓库中拉取,速度会很慢。默认podman从以下仓库中拉取镜
像:registry.access.redhat.com、registry.redhat.io、docker.io。下面配置加速器,提高从docker.io中拉取镜像的速度。
登录阿里云控制台,找到容器镜像服务,单击镜像工具→镜像加速器,找到自己的加速器地址,这里使用的是
https://frz7i079.mirror.aliyuncs.com.
修改 podman 的配置文件/etc/containers/registries.conf,修改内容
[root@pp ~]# cat /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "frz7i079.mirror.aliyuncs.com"
这里的意思是从 docker.io中拉取镜像时使用加速器frz7i079.mirror.aliyuncs.com,注意这里不需要加https,配置好之后不需要重启什
么服务。
下面开始拉取docker.io/nginx镜像,命令如下。
[root@pp ~]# podman pull docker.io/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 186b1aaa4aa6 done  
Copying blob b4df32aa5a72 done  
Copying blob a0bcbecc962e done  
Copying blob 589b7251471a done  
Copying blob a9edb18cadd1 done  
Copying blob a2abf6c4d29d done  
Copying config 605c77e624 done  
Writing manifest to image destination
Storing signatures
605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
拉取MySQL镜像docker.io/mysql,命令如下。
[root@pp ~]# podman pull mysql
Resolving "mysql" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/library/mysql:latest...
Getting image source signatures
Copying blob 93619dbc5b36 done  
Copying blob 37d5d7efb64e done  
Copying blob 99da31dd6142 done  
Copying blob ac563158d721 done  
Copying blob 72a69066d2fe done  
Copying blob 626033c43d70 done  
Copying blob 688ba7d5c01a done  
Copying blob d2ba16033dad done  
Copying blob 4d7cfa90e6ea done  
Copying blob 00e060b6d11d done  
Copying blob 1c04857f594f done  
Copying blob e0431212d27d done  
Copying config 3218b38490 done  
Writing manifest to image destination
Storing signatures
3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
[root@pp ~]# 
网易仓库地址是https://c.163yun.com/hub#/home,在浏览器中打开此界面需要登录,然后搜索需要的镜像即可。下面从网易仓库中
拉取 CentOS镜像,命令如下。
[root@pp ~]# 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
27.2 镜像管理
前面讲了要想创建容器必须有镜像,本节主要讲解镜像的管理。
27.2.1镜像的命名
一般情况下,镜像的命名格式如下。
1 服务器IP: 端口 /分类 /镜像名 :tag
如果不指定端口则默认为80,如果不指定 tag则默认为latest。
例如,192.168.248.45:5000/cka/centos:v2。 再如,hub.c.163.com/library/mysql:latest。
分类也是可以不写的,如docker.io/nginx:latest。
在把镜像上传(push)到仓库时,镜像必须按这种格式命名,因为仓库地址就是由镜像前面的IP决定的。如果只是在本机使用镜像,命名
可以随意。
查看当前系统有多少镜像,命令如下。
[root@pp ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      605c77e624dd  23 months ago  146 MB
docker.io/library/mysql       latest      3218b38490ce  24 months ago  521 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@pp ~]# 
27.2.2 对镜像重新做标签
如果想给本地已经存在的镜像起一个新的名称,可以用tag来做,语法如下。
1 podman tag 旧的镜像名 新的镜像名
tag之后,新的镜像名和旧的镜像名是同时存在的。
步骤①:给镜像做新标签,命令如下。
[root@pp ~]# podman tag docker.io/library/mysql 192.168.248.45/rhce/mysql:v2
这里是为docker.io/library/mysq1重新做个tag,名称为192.168.26.101/rhce/mysql,标签为2,这样命名的目的是让大家看到命名的
随意性,建议tag 可以设置为版本号、日期等有意义的字符。
步骤②:再次查看镜像,命令如下。
[root@pp ~]# podman images 
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      605c77e624dd  23 months ago  146 MB
docker.io/library/mysql       latest      3218b38490ce  24 months ago  521 MB
192.168.248.45/rhce/mysql     v2          3218b38490ce  24 months ago  521 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@pp ~]# 
可以看到,b05128b000dd对应的本地文件依然是存在的,因为它(ID为b05128b000dd)有两个名称,现在只是删除了一个名称而已,所
以在硬盘上仍然是存在的。
只有删除最后一个名称,本地文件才会被删除。
[root@pp ~]# podman rmi 192.168.248.45/rhce/mysql:v2 
Untagged: 192.168.248.45/rhce/mysql:v2
[root@pp ~]
27.2.4 查看镜像的层结构
虽然我们所用的镜像都是从网上下载下来的,但这些镜像在制作过程中都是一点点修改、一步步做出来的。如果我们要看某镜像的这些
步骤,可以用podman history命令,语法如下。
1 podman history镜像名

27.2.5 导出和导入镜像
一些服务器是无法连接到互联网的,所以无法从互联网上下载镜像。在还没有私有仓库的情况下,如何把现有的镜像传输到其他机器上
呢?这里就需要把本地已经pull下来的镜像导出为一个本地文件,这样就可以很容易地传输到其他机器。导出镜像的语法如下
1 podman save 镜像名 > file.tar
步骤①:把 docker.io/nginx:latest 导出为nginx.tar,命令如下
[root@pp ~]# podman save docker.io/library/nginx > nginx.tar
[root@pp ~]# 

删除 Nginx这个镜像,命令如下

[root@pp ~]# podman rmi docker.io/library/nginx
Untagged: docker.io/library/nginx:latest
Deleted: 605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
[root@pp ~]# 
既然上面已经把镜像导出为一个文件了,那么需要把这个文件导入,语法如下。
[root@pp ~]# podman load -i nginx.tar 
Getting image source signatures
Copying blob d874fd2bc83b done  
Copying blob e379e8aedd4d done  
Copying blob 2edcec3590a4 done  
Copying blob f1db227348d0 done  
Copying blob b8d6e692a25e done  
Copying blob 32ce5f6a5106 done  
Copying config 605c77e624 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/nginx:latest
27.3.1 创建一个简单的容器
运行一个最简单的容器,命令如下。
[root@pp ~]# podman run hub.c.163.com/library/centos
[root@pp ~]# podman ps
\CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@pp ~]# podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED         STATUS                     PORTS       NAMES
5aa772f744c3  hub.c.163.com/library/centos:latest  /bin/bash   14 seconds ago  Exited (0) 14 seconds ago              sleepy_kare
[root@pp ~]# 
可以看到,创建了一个容器,容器ID为455391081738,容器名是随机产生的,名称为kind_elgamal,所使用的镜像是
hub.c.163.com/library/centos,容器中运行的进程为/bin/bash(也就是镜像中的CMD指定的)。
podman ps看不到,podman ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运行的一瞬间就关闭了,为什么?
27.3.2 容器的生命期
把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,肉体也就宕机了,只有灵
魂正常运行,肉体才能正常运行
同理,只有容器中的进程正常运行,容器才能正常运行,容器中的进程宕机了,容器也就宕机了。因为没有终
端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了。
如果把这个bash附着到一个终端上,这个终端一直存在,bash就一直存在,那么是不是容器就能一直存活了
呢?
删除容器的语法如下
1 podman rm 容器ID/容器名
如果删除正在运行的容器,可以使用-f选项。
1 podman rm ‐f 容器ID/容器名
步骤①:删除刚才的容器,命令如下。
[root@pp ~]# podman rm 5aa772f744c3 
5aa772f744c31875f10e83d1f5ffab7f69e4064ac5102596d4a88d1bdbbe3895
[root@pp ~]# 
重新创建新的容器,加上-i -t选项,可以写作-it或-i-t。
(1)-t:模拟一个终端。
(2)-i:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了。
步骤②:创建一个容器,命令如下。
[root@pp ~]# podman run -it hub.c.163.com/library/centos
[root@fe4465083ddb /]# exit
exit
[root@pp ~]# 
创建好容器之后就自动进入容器中了,可以通过exit退出容器,命令如下。
[root@pp ~]# podman ps ‐q #‐q选项可以只显示容器ID,不会显示太多信息
[root@pp ~]# podman ps -a -q
fe4465083ddb
[root@pp ~]# 
但是一旦退出容器,容器就不再运行了。
如果希望创建好容器之后不自动进入容器中,可以加上-d选项。
27.3.3 创建临时容器
如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上--rm选项。
创建临时容器,命令如下。
[root@pp ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos
[root@10386f6b4e99 /]# exit
exit
[root@pp ~]# 
此容器被自动删除了,注意--rm和--restart=always选项不可以同时使用。
27.3.4 指定容器中运行的命令
创建容器时,容器中运行的是什么进程,都是由镜像中的CMD指定的。如果想自定义容器中运行的进程,可以在创建容器的命令最后指
定,如下所示。
[root@pp ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos sh
sh-4.2# exit
exit
[root@pp ~]#
这里就是以sh的方式运行,而不是以 bash的方式运行。
27.3.5 创建容器时使用变量
在利用一些镜像创建容器时需要传递变量,例如,使用MySQL 的镜像、WordPress的镜像创建容器时都需要通过变量来指定一些必备
的信息。需要变量用-e选项来指定,可以多次使用-e选项来指定多个变量。
创建一个名称为c1的容器,里面传递两个变量,命令如下。
[root@pp ~]# podman run -it --name=c1 --rm -e aa=123 -e bb=456 hub.c.163.com/library/centos
[root@8490fc4960c7 /]# echo $aa
123
[root@8490fc4960c7 /]# echo $bb
456
[root@8490fc4960c7 /]# exit
exit
[root@pp ~]# 
在创建容器时,通过-e选项指定了两个变量aa和 bb,然后进入容器之后可以看到具有这两个变量。
27.3.6 把容器的端口映射到物理机上
外部主机(本机之外的其他主机)是不能和容器进行通信的,如果希望外部主机能访问到容器的内容,就
需要使用-p选项将容器的端口映射到物理机上,以后访问物理机对应的端口就可以访问到容器了,如图
27-5所示。
语法如下。
-p N:物理机随机生成一个端口映射到容器的端口N上。    
-p M:N:把容器的端口N映射到物理机指定的端口M上。
步骤①:创建一个名称为web的容器,把容器的端口80映射到物理机的一个随机端口上,命令如
下。
[root@pp ~]# podman run -d --name=web --restart=always -p 80 docker.io/library/nginx
90813bcc5819e67e527d8abb715f083f2aa488a7aca853d288e29c985295c671
[root@pp ~]# 
这里把 web容器的端口80映射到物理机的随机端口上,这个端口号可以通过如下命令来查询。
[root@pp ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                  NAMES
90813bcc5819  docker.io/library/nginx:latest  nginx -g daemon o...  37 seconds ago  Up 37 seconds ago  0.0.0.0:46327->80/tcp  web
[root@pp ~]# 
可以看到,映射到物理机的46327上了,访问物理机的端口46327即可访问到web容器,结果如图。
删除此容器,命令如下。
[root@pp ~]# podman rm -f web
90813bcc5819e67e527d8abb715f083f2aa488a7aca853d288e29c985295c671

27.5 管理容器的命令
容器如同一台没有显示器的电脑,如何查看容器中的内容呢,又如何在容器中执行命令呢?可以使用
podman exec命令来实现,如图27-8所示。
27.5.1 在容器中执行指定的命令
语法如下
1 podman exec 容器名 命令
注意
有的镜像中不存在bash,可以使用sh替代。
27.5.2 物理机和容器互相拷贝文件
有时我们需要让物理机和容器之间互相拷贝一些文件,拷贝文件的语法如下。
1 podman cp /path/file 容器:/path2 把物理机中的/path/f1e拷贝到容器的/path2中
2 podman cp 容器:/path2/file /path/ 把容器中的/path2/l1e拷贝到物理机的/path2中
27.5.3 关闭、启动、重启容器
一般情况下,在操作系统中重启某个服务,可以通过“systemctl restart服务名”来重启,容器中一般是无法使用systemctl命令的。如果
要重启容器中的程序,直接重启容器就可以了。下面演示如何关闭、启动、重启容器。
步骤①:关闭、启动、重启容器
27.5.4 查看容器中的输出
当容器无法正常运行时,需要查看容器中的输出来进行排错。如果要查看容器中的日志信息,可以通过如下命令来查看。
1 podman logs 容器名
如果想不间断地查看输出,可以使用如下命令。
1 podman logs ‐f 容器名
27.5.5 数据卷的使用
当容器创建出来之后,会映射到物理机的某个目录(这个目录叫作容器层)中,在容器中写的数据实
际都存储在容器层,所以只要容器不被删除,在容器中写的数据就会一直存在。但是一旦删除容器,对
应的容器层也会被删除。
如果希望数据能永久保存,则需要配置数据卷,把容器中的指定目录挂载到物理机的某目录上
这里把容器中的目录aa挂载到物理机的目录bb上,当往容器目录aa中写数据时,实际上是往物理
机的目录bb中写的。这样即使删除了容器,物理机目录bb中的数据仍然是存在的,就实现了数据的永
久保留(除非手动删除)。
在创建容器时,用-v选项指定数据卷,用法如下。
1 ‐v /dirl 把物理机的一个随机目录映射到容器的/dir1目录中
2 ‐v /dir2:/dirl:Z 把物理机的指定目录/dir2映射到容器的/dir1目录中
记住,冒号左边的/dir2是物理机的目录,此目录需要提前创建出来;冒号右边的/dir1是容器中的目录,如果此目录不存在则会自动创
建。这里大写Z的意思是把物理机的目录/dir2的上下文改成container_file_t。
步骤①:创建一个名称为c1的容器,把物理机的一个随机目录映射到容器的/data目录中,命令如下。
[root@pp ~]# podman run -dit --name=c1 --restart=always -v /data/ hub.c.163.com/library/centos
47a66e083be7982719257a535f580b955c989c7531ee4d5ef19c138821959d84
[root@pp ~]# 
在此命令中,v后面只指定了一个目录/data,指的是在容器中创建/data,挂载到物理机的一个随机目录上。
步骤②:查看对应物理机是哪个目录,命令如下。
[root@pp ~]# podman inspect c1 | grep -A5 Mounts"Mounts": [{"Type": "volume","Name": "cff4773d81248cef9997322c9de263f1ec680966735345305216b30642b690a7","Source": "/var/lib/containers/storage/volumes/cff4773d81248cef9997322c9de263f1ec680966735345305216b30642b690a7/_data","Destination": "/data",
[root@pp ~]# 
上面有两个参数,其中 Destination指的是容器中的目录, Source指的是物理机对应的目录。得到的结论就是容器中的目录/data对应物
理机
先查看c1容器的目录/data中的数据和物理机对应目录的数据,命令如下。
[root@pp ~]# podman exec c1 ls /data/
[root@pp ~]# ls /var/lib/containers/storage/volumes/cff4773d81248cef9997322c9de263f1ec680966735345305216b30642b690a7/_data/
[root@pp ~]# 
可以看到,目录是空的,如下所示。
[root@pp ~]# podman cp /etc/hosts c1:/data/
[root@pp ~]# podman exec c1 ls /data/
hosts
[root@pp ~]# ls /var/lib/containers/storage/volumes/cff4773d81248cef9997322c9de263f1ec680966735345305216b30642b690a7/_data/
hosts
[root@pp ~]# 
如果想在物理机中也指定目录而非随机挂载目录,则使用-v /xx:/data,此处冒号左边是物理机的目录,冒号右边是容器中的目录,这里
要提前在物理机上把目录/xx创建出来。
步骤④:创建一个名称为c1的容器,把物理机的目录/xx映射到容器的/data目录中,命令如下。
[root@pp ~]# mkdir /xx
[root@pp ~]# podman run -dit --name=c1 --restart=always -v /xx:/data/:z hub.c.163.com/library/centos7ecb9da861817aded61a29cf6aa2ab9a9d11005a213bf204335ac38416cc2ceb
[root@pp ~]# 
这里大写Z的意思是把物理机的目录/xx的上下文改成container_file_t。查看/xx的上下文,命令如下。
[root@pp ~]# ls -dZ /xx
system_u:object_r:container_file_t:s0 /xx
[root@pp ~]# 
查看此容器的属性,命令如下。
[root@pp ~]# podman inspect c1 | grep -A5 Mounts"Mounts": [{"Type": "bind","Source": "/xx","Destination": "/data","Driver": "",
[root@pp ~]# 
步骤⑤:拷贝一些测试文件过去并观察一下,命令如下。
[root@pp ~]# podman exec c1 ls /data/
[root@pp ~]# ls /xx/
[root@pp ~]# podman cp /etc/hosts c1:/data/
[root@pp ~]# podman exec c1 ls /data/
hosts
[root@pp ~]# ls /xx/
hosts
[root@pp ~]# 
步骤⑥:删除此容器,命令如下。
[root@pp ~]# podman rm -f c1
7ecb9da861817aded61a29cf6aa2ab9a9d11005a213bf204335ac38416cc2ceb
[root@pp ~]# 
在重启系统后,所创建的容器并不会随着系统自动运行,可把容器创建为一个服务,然后设置这个服务开机自动启动,那么这个容器也
就可以实现开机自动启动了。
下面使用iu用户创建一个容器,然后实现开机自动启动。
27.6 使用普通用户对容器进行管理
使用iu用户通过ssh登录到server,切记这里不能通过其他用户用su命令切换到iu用户。
不同用户对镜像和容器的管理都是独立的,所以root拉取的镜像并不能给lduan用户使用。
[iu@pp ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[iu@pp ~]$ 
可以看到,使用iu用户查询时是没有任何镜像的,所以先拉取Nginx镜像,命令如下。
[iu@pp ~]$ podman pull docker.io/library/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 186b1aaa4aa6 done  
Copying blob a0bcbecc962e done  
Copying blob 589b7251471a done  
Copying blob b4df32aa5a72 done  
Copying blob a2abf6c4d29d done  
Copying blob a9edb18cadd1 done  
Copying config 605c77e624 done  
Writing manifest to image destination
Storing signatures
605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
为了使用数据卷,先使用root用户创建一个目录/yy并把所有者和所属组改为iu,命令如下。
[root@pp ~]# mkdir /yy
[root@pp ~]# chown iu.iu /yy/
[root@pp ~]# 
然后使用iu用户创建一个名称为web的容器,把物理机的目录/yy映射到容器的/data目录中,命令如下。
[iu@pp ~]$ podman run -dit --name=web --restart=always -v /yy:/data/:Z docker.io/library/nginx
78aab24e798696415f31617adb43edfb6a06214bafb0c4cccbfefe90c1eb06ff
[iu@pp ~]$ 
现在容器创建好了,但是这个容器在系统重启时并不会随着系统一起启动,所以下面设置允许开机自动运行容器。要让容器跟着系统一
起启动,需要为这个容器创建一个服务。
首先设置blab用户创建的服务在系统启动时能自动启动,命令如下。
[iu@pp ~]$ loginctl enable-linger iu
[iu@pp ~]$ 
如果这里没有开启,或者通过loginctl disable-linger iu关闭了,那么系统启动之后iu用户创建的服务是不会自动启动的,只有
iu用户通过ssh或控制台登录之后,服务才会启动起来。
这里设置了logincd enable-linger iu,当系统启动之后,iu用户即使没有通过ssh或控制台登录,iu用户创建的服务也会自动启
动。是开启还是关闭可以通过loginctl show-user iu | grep Linger来查看。
因为要为容器创建出来一个服务,所以先创建存储服务文件的目录,命令如下。
[iu@pp ~]$ mkdir -p ~/.config/systemd/user ; cd ~/.config/systemd/user
[iu@pp user]$ ls
[iu@pp user]$ 
为web容器生成一个服务文件,命令如下。
[iu@pp user]$ podman generate systemd --name web --files --new
/home/iu/.config/systemd/user/container-web.service
[iu@pp user]$ 
这里--new的意思是,即使现在把web容器删除,那么重启系统时也会自动创建这个容器。
其中--name可以简写为-n,--files可以简写为-f,--new可以省略,所以整个命令可以简写如下。
1 podman generate systemd ‐n web ‐f
重新加载这个服务文件,这里要加上--user选项,命令如下。
[iu@pp user]$ systemctl --user daemon-reload 
[iu@pp user]$ 
设置这个服务开机自动启动,命令如下。
[iu@pp user]$ systemctl --user enable container-web.service 
Created symlink /home/iu/.config/systemd/user/multi-user.target.wants/container-web.service → /home/iu/.config/systemd/user/container-web.service.
Unit /home/iu/.config/systemd/user/container-web.service is added as a dependency to a non-existent unit multi-user.target.
Created symlink /home/iu/.config/systemd/user/default.target.wants/container-web.service → /home/iu/.config/systemd/user/container-web.service.
[iu@pp user]$ ls
container-web.service  default.target.wants  multi-user.target.wants
[iu@pp user]$ 
然后重启操作系统进行验证,命令如下。
[iu@pp ~]$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS       NAMES
78aab24e7986  docker.io/library/nginx:latest  nginx -g daemon o...  15 minutes ago  Up 15 minutes ago              web
[iu@pp ~]$ 
等系统启动之后发现 web容器跟着系统启动起来了。

相关文章:

了解如何在linux使用podman管理容器

本章主要介绍使用 podman 管理容器。 了解什么是容器,容器和镜像的关系 安装和配置podman 拉取和删除镜像 给镜像打标签 导出和导入镜像 创建和删除镜像 数据卷的使用 管理容器的命令 使用普通用户管理容器 使用普通用户管理容器 对于初学者来说,不太容…...

SQL命令---修改字段的数据类型

介绍 使用sql语句修改字段的数据类型。 命令 alter table 表明 modify 字段名 数据类型;例子 有一张a表,表里有一个id字段,长度为11。使用命令将长度修改为12 下面使用命令进行修改: alter table a modify id int(12) NOT NULL;下面使修…...

一键提取微信聊天记录,生成HTML、Word文档永久保存,还能生成微信年度聊天报告

不知道生活中你有没有遇到过这种情况,聊天记录不完整,有的在手机上,有的在电脑上,搜索起来很烦。那有没有一种办法可以把微信聊天记录统一呢?当然是有的。下面,就让我们一起来看一下怎么操作。 先看效果 操…...

docker使用详解

介绍 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。 Docker基于轻量级虚拟化技术,整个项目基于Go语言开…...

MidJourney笔记(7)-Seeds

我相信很多人在使用MidJourney的时候,都会遇到一个问题,就是如何保持生成图像的一致性,或者相对一致性,差异性不是很大。此时,我们就需要引入一个seed值,类似给这个提示词生成的图片做一个id标识。 那这个seed值怎么使用? 其实,在我们每次生成的图片,都有有一个seed值…...

pom配置文件重要标签探究

文章目录 dependencies标签dependencyManagement标签两者辨析repositories标签properties标签 dependencies标签 <dependencies>标签用于指定项目的依赖项列表。这些依赖项可以是应用程序代码所需的库&#xff0c;也可以是Spring Boot和其他第三方库。<dependencies&…...

如何在Ubuntu的Linux系统上搭建nacos集群

官方给出的集群部署架构图 集群部署说明 (nacos.io)3个或3个以上nacos节点才能构成集群当前示例中包含3个nacos节点&#xff0c;同时一个负载均衡器代理3个nacos&#xff0c;本示例中负载均衡器可使用的是nginx 准备并安装好正常运行的nginx&#xff0c;本示例略准备并安装好正…...

oracle中的PIVOT函数

在Oracle数据库中&#xff0c;PIVOT 是一个强大的功能&#xff0c;可以将行数据转换为列数据。这在报表和数据分析中非常有用。 基本的 PIVOT 语法如下&#xff1a; SELECT * FROM (SELECT <column1>, <column2>, ..., <pivot_column>, <aggregate_func…...

【经验分享】gemini-pro和gemini-pro-vision使用体验

Gemini Gemini已经对开发者开放了Gemini Pro的使用权限&#xff0c;目前对大家都是免费的&#xff0c;每分钟限制60条&#xff0c;至少这比起CloseAI的每个账户5刀限速1min3条要香的多&#xff0c;目前已于第一时间进行了体验 一句话总结&#xff0c;google很大方&#xff0c;但…...

JS冒泡排序

想必大家都多多少少了解过一点排序&#xff0c;让我为大家介绍一下冒泡排序吧&#xff01; 假设我们现在有一个数组[2&#xff0c;4&#xff0c;3&#xff0c;5&#xff0c;1] 我们来分析一下&#xff1a; 1.一共需要的趟数 我们用外层for循环 5个数据我们一共需要走4躺 长度就…...

面向遥感图像的道路区域提取及优化

一、论文2017 (1)DeepRoadMapper (2)Topology Loss2018 (1)RoadTracer (2)iterative-deep-learning2019 (1)Leveraging Crowdsourced GPS Data for Road Extraction from Aerial Imagery (2)RoadNet (3)RoadTagger (4)Generative Graph Transformer (5)road_…...

mysql中NULL值

mysql中NULL值表示“没有值”&#xff0c;它跟空字符串""是不同的 例如&#xff0c;执行下面两个插入记录的语句&#xff1a; insert into test_table (description) values (null); insert into test_table (description) values ();执行以后&#xff0c;查看表的…...

[c++] 意识需要转变的一个例子,全局变量的构造函数先于main执行

最近还遇到一个例子是关于&#xff1a;从C转C开发需要注意的一个意识问题。本人遇到的这个问题是&#xff0c;带着C的意识来看C的代码&#xff0c;然后根据代码看&#xff0c;有一个全局变量的值在main函数进入之后才会更改&#xff0c;所以百思不得其解&#xff0c;这个变量怎…...

VSCode 配置自动生成头文件

相关文章 VSCode 开发C/C实用插件分享——codegeex VSCode 开发C/C实用插件分享——koroFileHeader VSCode 配置自动生成头文件 一、snippets二、配置步骤三、效果展示 一、snippets 相信大家对C、C都头文件都不陌生&#xff0c;都会发现每个头文件都会包括下面的这些格式&…...

【大数据】Hudi 核心知识点详解(一)

&#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#xff0c;请给博主一个一键三连 &#x1f680;&#x1f680;&#x1f680; 吧 &#xff08;点赞 &#x1f9e1;、关注 &#x1f49b;、收藏 &#x1f49a;&#xff09;&#xff01;&#xff01;&#xff01;您的支持 &#x…...

windows上抓包出现大包未分片以及关闭tso方法

wireshark抓包中会有大数据包&#xff08;未分片包&#xff09;和ip校验和不对的包&#xff0c;问题根因在目前很多电脑网卡支持TSO和将校验和计算到网卡上&#xff0c;导致抓出数据包未分片 详细文章看: https://www.cnblogs.com/charlieroro/p/11363336.html 目前很多网卡已…...

Leetcode 2454. 下一个更大元素 IV

Leetcode 2454. 下一个更大元素 IV题目 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数&#xff0c;你必须找到对应元素的 第二大 整数。如果 nums[j] 满足以下条件&#xff0c;那么我们称它为 nums[i] 的 第二大 整数&#xff1a; j >nums[j] > nu…...

浏览器全屏按键同f11效果

模拟键f11 // for IE&#xff0c;这里和fullScreen相同&#xff0c;模拟按下F11键退出全屏 let wscript new ActiveXObject(WScript.Shell) if (wscript ! null) {wscript.SendKeys({F11}) }同f11键效果生效全屏函数 //判断是否是全屏状态 var isFull Math.abs(window.scree…...

CentOS 7.9 安装 k8s(详细教程)

&#x1f37f;安装步骤 &#x1f35a;安装前准备事项&#x1f35a;安装docker&#x1f35a;删除docker&#x1f35a;安装yum工具&#x1f35a;设置docker镜像源&#x1f35a;安装指定版本docker&#x1f35a;设置开启自启&#x1f35a;阿里云镜像加速 &#x1f35a;准备环境&am…...

区块链的可拓展性研究【05】闪电网络

1.闪电网络&#xff1a;闪电网络是一种基于比特币区块链的 Layer2 扩容方案&#xff0c;它通过建立一个双向支付通道网络&#xff0c;实现了快速、低成本的小额支付。闪电网络的交易速度非常快&#xff0c;可以达到每秒数万笔交易&#xff0c;而且交易费用非常低&#xff0c;几…...

如何部署Portainer容器管理工具+cpolar内网穿透实现公网访问管理界面

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…...

Linux——Samba文件共享服务配置

SMB/CIFS协议 SMB协议(Server Message Block 又称Common Internet File System&#xff08;CIFS&#xff09;) 是由微软开发的网络传输协议&#xff0c;用来实现网络共享文件系统、打印机等资源。 SMB协议有多个版本和不同的兼容性。 SMBv1/CIFS: 也称为SMB1或CIFS。最初由Micr…...

自动驾驶右向辅助功能规范

目 录 Contents 目录 1. 介绍 Introduction. 8 1.1 此文档的范围和目的 Scope and Purpose of This Document 8 1.2 参考文档References. 9 1.3 文档的维护 Maintenance of the Document 10 1.4 缩略词Abbreviations. 10 1.5 文档概述Document Overview.. 11 1.6 功能…...

ASF-YOLO开源 | SSFF融合+TPE编码+CPAM注意力,精度提升!

目录 摘要 1 Introduction 2 Related work 2.1 Cell instance segmentation 2.2 Improved YOLO for instance segmentation 3 The proposed ASF-YOLO model 3.1 Overall architecture 3.2 Scale sequence feature fusion module 3.3 Triple feature encoding module …...

Mac 如何删除文件及文件夹?可以尝试使用终端进行删除

MacOS 是 Mac 电脑采用的操作系统&#xff0c;你知道 Mac 如何删除文件吗&#xff1f;除了直接将文件或者文件夹拖入废纸篓之外&#xff0c;我们还可以采用终端命令的办法去删除文件&#xff0c;本文为大家总结了 Mac 删除文件方法。 为何使用命令行删除文件 在使用 Mac 电脑…...

最新Redis7持久化(权威出版)

首先我们要知道什么是持久化&#xff1a;持久化是指将数据保存到磁盘上&#xff0c;以确保在Redis服务器重启时数据不会丢失。 Redis支持两种主要的持久化方式&#xff1a;RDB持久化和AOF持久化 下面让我依次给你介绍一下&#xff1a; RDB持久化 作用 这是将Redis数据保存…...

Redis权限管理体系(一):客户端名及用户名

在Redis6之前的版本中&#xff0c;因安全认证的主要方式是使用Redis实例的密码进行基础控制&#xff0c;而无法按照不同的应用来源配置不同账号以及更细粒度的操作权限控制来管理。本文先从client list中的信息入手&#xff0c;逐步了解Redis的客户端名设置、用户设置及权限控制…...

【数据库设计和SQL基础语法】--查询数据--排序

一、排序数据 1.1 ORDER BY子句 单列排序 单列排序是通过使用 ORDER BY 子句对查询结果按照单个列进行排序。以下是单列排序的一些示例&#xff1a; 升序排序&#xff08;默认&#xff09;&#xff1a; SELECT column1, column2, ... FROM your_table_name ORDER BY column_t…...

【sqli靶场】第六关和第七关通关思路

目录 前言 一、sqli靶场第六关 1.1 判断注入类型 1.2 观察报错 1.3 使用extractvalue函数报错 1.4 爆出数据库中的表名 二、sqli靶场第七关 1.1 判断注入类型 1.2 判断数据表中的字段数 1.3 提示 1.4 构造poc爆库名 1.5 构造poc爆表名 1.6 构造poc爆字段名 1.7 构造poc获取账…...

c语言快速排序(霍尔法、挖坑法、双指针法)图文详解

快速排序介绍&#xff1a; 快速排序是一种非常常用的排序方法&#xff0c;它在1962由C. A. R. Hoare&#xff08;霍尔&#xff09;提的一种二叉树结构的交换排序方法&#xff0c;故因此它又被称为霍尔划分&#xff0c;它基于分治的思想&#xff0c;所以整体思路是递归进行的。 …...