RHCE8 资料整理(八)

RHCE8 资料整理

  • 第 8 篇 容器管理
    • 第 27 章 使用podman管理容器
      • 27.1 安装及配置podman
      • 27.2 镜像管理
        • 27.2.1 镜像的命名
        • 27.2.2 对镜像重新做标签
        • 27.2.3 删除镜像
        • 27.2.4 查看镜像的层结构
        • 27.2.5 导出和导入镜像
      • 27.3 创建容器
        • 27.3.1 创建容器
        • 27.3.2 容器的生命周期
        • 27.3.3 创建临时容器
        • 27.3.4 指定容器中运行的命令
        • 27.3.5 创建容器时使用变量
      • 27.3.6 把容器的端口映射到物理机上
      • 27.4 实战练习
      • 27.5 管理容器的命令
        • 27.5.1 在容器中执行指定的命令
        • 27.5.2 物理机和容器互相拷贝文件
        • 27.5.3 关闭、启动和重启容器
        • 27.5.4 查看容器中的输出
        • 27.5.5 数据卷的使用
      • 27.6 使用普通用户对容器进行管理

第 8 篇 容器管理

第 27 章 使用podman管理容器

好文推荐
docker 与 podman 的故事:一个方兴未艾,一个异军突起
Podman简介

什么是容器?
容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。

为此,容器利用一种操作系统 (OS) 虚拟化的形式,进而可以利用操作系统内核的功能(例如 Linux 命名空间和 cgroups、Windows 孤岛和作业对象)来隔离进程,并控制进程可以访问的 CPU、内存和磁盘的数量。

容器小巧轻便、速度快且可移植;与虚拟机不同,容器不需要在每个实例中都包含访客操作系统,只需利用主机操作系统的功能和资源。

简单的说:就是利用像沙箱技术,把主机资源(例如CPU,内存和硬盘等)进行拆分隔离,使程序或服务能够在每一个单独的沙箱内运行而互不干扰。

podman
Podman是RedHat开发的一个用户友好的容器调度器,是一种开源的Linux原生工具,是RedHat 8和CentOS 8中默认的容器引擎, 旨在根据开放容器倡议(Open Container Initiative, OCI)标准 开发、管理和运行容器和Pod。是一款集合了命令集的工具,设计初衷是为了处理容器化进程的不同任务,可以作为一个模块化框架工作。

Podman旨在使用类似于Kubernetes的方法来构建、管理和运行容器。

自RHEL 8起,Red Hat用CRI-O/Podman取代了Docker Daemon。

27.1 安装及配置podman

RedHat 8已经默认安装了podman,其他版本需要手动安装,

[root@node-137 ~]# yum install -y podman
[root@node-137 ~]# podman images
REPOSITORY                 TAG      IMAGE ID       CREATED         SIZE

如果要拉取镜像,一般是从国外镜像仓库拉取,速度会很慢,默认podman从以下仓库中拉取:registry.access.redhat.comregistry.redhat.iodocker.io。下面配置加速器,提高从docker.io中拉取镜像的速度。

登录阿里云控制台,找到容器镜像服务,单击镜像工具->镜像加速器,找到自己的加速器地址。

修改配置文件

[root@node-137 ~]# egrep -v '^$|^#' /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "frz7i079.mirror.aliyuncs.com"
[root@node-137 ~]# podman pull alpine
Trying to pull docker.io/library/alpine...
Getting image source signatures
Copying blob 59bf1c3509f3 done
Copying config c059bfaa84 done
Writing manifest to image destination
Storing signatures
c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18

这里的意思是从docker.io中拉取镜像时,使用加速器frz7i079.mirror.aliyuncs.com,注意不要加https,配置好之后不需要重启服务。

网易仓库地址是https://c.163yun.com/hub#/home,在浏览器登录,然后搜寻镜像即可,下载nginx

[root@node-137 ~]# podman pull hub.c.163.com/public/nginx:1.2.1

查看镜像

[root@node-137 ~]# podman images
REPOSITORY                   TAG      IMAGE ID       CREATED         SIZE
docker.io/library/alpine     latest   c059bfaa849c   24 months ago   5.87 MB
hub.c.163.com/public/nginx   1.2.1    2dc68ff797db   7 years ago     178 MB

27.2 镜像管理

27.2.1 镜像的命名

一般情况下,镜像的命名格式:
服务器IP[或 域名]:端口/分类/镜像名:tag
如果不指定端口则默认为80,如果不指定tag则默认为latest,例如,hub.c.163.com/public/nginx:1.2.1
分类也可以不写,如docker.io/nginx:latest

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

27.2.2 对镜像重新做标签

如果想给本地已经存在的镜像起一个新的名称,可以用tag命令,语法,
podman tag 旧镜像名 新镜像名

[root@node-137 ~]# podman tag hub.c.163.com/public/nginx:1.2.1 192.168.17.137/nginx:latest
[root@node-137 ~]# podman images
REPOSITORY                   TAG      IMAGE ID       CREATED         SIZE
docker.io/library/alpine     latest   c059bfaa849c   24 months ago   5.87 MB
hub.c.163.com/public/nginx   1.2.1    2dc68ff797db   7 years ago     178 MB
192.168.17.137/nginx         latest   2dc68ff797db   7 years ago     178 MB

可以看到,对某镜像做了标签之后,看似时两个镜像,其实对应的是同一个(类似linux中的硬链接),镜像ID是一样的。删除其中一个镜像是不会删除存储在硬盘上的文件,只有把IMAGE ID所对应的所有名称全部删除,才会把镜像从硬盘删除。

27.2.3 删除镜像

删除镜像使用rmi,语法,
podman rmi 镜像名:tag

[root@node-137 ~]# podman rmi localhost/nginx:latest
Untagged: localhost/nginx:latest
27.2.4 查看镜像的层结构

虽然所用镜像都是从网络下载的,但是这些镜像的制作过程中都是一点点修改的做出来的。如果我们要查看某个镜像的制作步骤,可以使用history命令,语法,
podman history [--no-trunc] 镜像名

[root@node-137 ~]# podman history docker.io/library/nginx:latest  --no-trunc
ID                                                                 CREATED         CREATED BY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     SIZE      COMMENT
605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85   23 months ago   /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon off;"]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             0B 
<missing>                                                          23 months ago   /bin/sh -c #(nop) STOPSIGNAL SIGQUIT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0B 
<missing>                                                          23 months ago   /bin/sh -c #(nop) EXPOSE 80                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0B 
<missing>                                                          23 months ago   /bin/sh -c #(nop) ENTRYPOINT ["/docker-entrypoint.sh"]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0B 
<missing>                                                          23 months ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919af2fb2d7c749ccbc446b8c10eb217366e5a65640ee9edcc25 in /docker-entrypoint.d                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1.395kB
<missing>                                                          23 months ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7de297435e32af634f29f7132ed0550d342cad9fd20158258 in /docker-entrypoint.d                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           666B
<missing>                                                          23 months ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b03c4e6c8c513ae014f691fb05d530257dfffd07035c1b75da in /docker-entrypoint.d                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           894B
<missing>                                                          23 months ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca017fb64d502ce873a31b2e0decd75297a8fb0a287f97acf92 in /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              602B
<missing>                                                          23 months ago   /bin/sh -c set -x && addgroup --system --gid 101 nginx && adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid 101 nginx && apt-get update && apt-get install --no-install-recommends --no-install-suggests -y gnupg1 ca-certificates && NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; found=''; for server in hkp://keyserver.ubuntu.com:80 pgp.mit.edu ; do echo "Fetching GPG key $NGINX_GPGKEY from $server"; apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; done; test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* && dpkgArch="$(dpkg --print-architecture)" && nginxPackages=" nginx=${NGINX_VERSION}-${PKG_RELEASE} nginx-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} nginx-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} nginx-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} nginx-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${PKG_RELEASE} " && case "$dpkgArch" in amd64|arm64) echo "deb https://nginx.org/packages/mainline/debian/ bullseye nginx" >> /etc/apt/sources.list.d/nginx.list && apt-get update ;; *) echo "deb-src https://nginx.org/packages/mainline/debian/ bullseye nginx" >> /etc/apt/sources.list.d/nginx.list && tempDir="$(mktemp -d)" && chmod 777 "$tempDir" && savedAptMark="$(apt-mark showmanual)" && apt-get update && apt-get build-dep -y $nginxPackages && ( cd "$tempDir" && DEB_BUILD_OPTIONS="nocheck parallel=$(nproc)" apt-get source --compile $nginxPackages ) && apt-mark showmanual | xargs apt-mark auto > /dev/null && { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; } && ls -lAFh "$tempDir" && ( cd "$tempDir" && dpkg-scanpackages . > Packages ) && grep '^Package: ' "$tempDir/Packages" && echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list && apt-get -o Acquire::GzipIndexes=false update ;; esac && apt-get install --no-install-recommends --no-install-suggests -y $nginxPackages gettext-base curl && apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list && if [ -n "$tempDir" ]; then apt-get purge -y --auto-remove && rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; fi && ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log && mkdir /docker-entrypoint.d   25.35MB
<missing>                                                          23 months ago   /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   25.35MB
<missing>                                                          23 months ago   /bin/sh -c #(nop) ENV NJS_VERSION=0.7.1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        25.35MB
<missing>                                                          23 months ago   /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     25.35MB
<missing>                                                          23 months ago   /bin/sh -c #(nop) LABEL maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           25.35MB
<missing>                                                          23 months ago   /bin/sh -c #(nop) CMD ["bash"]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 25.35MB
<missing>                                                          23 months ago   /bin/sh -c #(nop) ADD file:09675d11695f65c55efdc393ff0cd32f30194cd7d0fbef4631eebfed4414ac97 in /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               31.36MB
27.2.5 导出和导入镜像

无法联网的服务器,需要离线导入和导出镜像

导出,

podman save 镜像名 > file.tar

导入,

podman load -i file.tar
[root@node-137 ~]# podman save docker.io/library/alpine:latest > alpine.tar
[root@node-137 ~]# ll
...
-rw-r--r--  1 root root 5875712 Nov 23 16:08 alpine.tar
...

[root@node-138 ~]# scp node-137:/root/alpine.tar .
alpine.tar                                                                                           100% 5738KB  44.4MB/s   00:00
[root@node-138 ~]# ll
...
-rw-r--r--. 1 root root   5875712 Nov 23 22:20 alpine.tar
...
[root@node-138 ~]# podman load -i alpine.tar
Getting image source signatures
Copying blob 8d3ac3489996 done
Copying config c059bfaa84 done
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/alpine:latest
[root@node-138 ~]# podman images
REPOSITORY                 TAG      IMAGE ID       CREATED         SIZE
docker.io/library/alpine   latest   c059bfaa849c   24 months ago   5.87 MB

27.3 创建容器

容器就是镜像运行在宿主机上的一个实例。

查看正在运行的容器,

podman ps [-aq]
-a 查看所有容器,包括未运行的
-q 只显示容器ID
27.3.1 创建容器
podman run -itd 镜像名:tag
-i 可以让用户进行交互
-t 模拟一个终端
-d 后台运行
--restart=always 重启策略,always一直
--name=abc 以指定名称运行容器
--rm 退出容器后,自动删除容器
27.3.2 容器的生命周期

容器的生命周期包括以下几个关键阶段:
在这里插入图片描述

  • 创建(Create):基于镜像创建一个新的容器实例。
  • 启动(Start):启动已创建的容器,使其处于运行状态。
  • 运行(Run):在容器中运行应用程序,处理请求等。
  • 停止(Stop):停止正在运行的容器,但并不会删除它。
  • 删除(Delete):从主机系统中删除已停止的容器实例。
  • 监控(Monitor):监控容器的运行状态和资源使用情况。

删除容器语法,

podman rm [-f] 容器ID/容器名
-f 删除正在运行的容器
[root@node-137 ~]# podman rm dd5
dd5de0dae9777e732544aa67fb5561218fa5ef87c434ac5170923462cf81eb41
[root@node-137 ~]# podman ps -a
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
27.3.3 创建临时容器

可以在启动容器时,加--rm选项,当退出容器后,自动删除容器

27.3.4 指定容器中运行的命令

创建容器时,容器中运行什么进程,都是由镜像中的CMD指定的。如果想自定义容器中运行的进程,可以在创建容器的命令最后指定,

[root@node-137 ~]# podman run -it docker.io/library/alpine:latest /bin/sh
#或
[root@node-137 ~]# podman run -it docker.io/library/alpine:latest sh
27.3.5 创建容器时使用变量

在利用一些镜像创建容器时,如果需要传递变量,需要变量使用-e来指定,可以多次使用-e来指定多个变量

[root@node-137 ~]# podman run -it --rm -e aa=123 -e bb=234 docker.io/library/alpine:latest /bin/sh
/ # echo $aa
123
/ # echo $bb
234
/ # exit
[root@node-137 ~]# podman run -it --rm -e aa=123  bb=234 docker.io/library/alpine:latest /bin/sh
Error: unable to pull bb=234: error getting default registries to try: invalid reference format

但不要打算使用一个-e传递多个变量

27.3.6 把容器的端口映射到物理机上

一般来说,外部主机是不能和本机容器进行通信的,如果希望外部主机能访问容器,需要使用-p选项将容器端口映射到本机。
语法,

-p N 物理机随机生成一个端口映射到容器端口
-p M:N 把容器指定的N端口映射到物理机的M端口
[root@node-137 ~]# podman run -d --name=web --restart=always -p 80:80 docker.io/library/nginx:latest
8d220ee835f12e2de5dc3fec5fb2e311577541fece40a69df3a2f1a0a12016e2

[root@node-138 ~]# curl node-137
<!DOCTYPE html>
<html>
...
<h1>Welcome to nginx!</h1>
...
</html>

27.4 实战练习

创建MySQL容器

  1. 下载镜像
[root@node-137 ~]# podman pull docker.io/library/mariadb:latest
  1. 创建容器
[root@node-137 ~]# podman run -d --name=db --restart=always -e MYSQL_ROOT_PASSWOR=haha001 -e MYSQL_DATABASE=blog docker.io/library/mariadb:latest
4143419fe67707a2388452417770042985bbab6089625458ebd86f5f066f0be7
[root@node-137 ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND  CREATED        STATUS                     PORTS  NAMES
4143419fe677  docker.io/library/mysql:latest  mysqld   6 seconds ago  Up Less than a second ago         db
  1. 查询信息
[root@node-137 ~]# podman inspect db|grep -i ipaddr
            "SecondaryIPAddresses": null,
            "IPAddress": "10.88.0.17",
  1. 在物理机安装MariaDB客户端
[root@node-137 ~]# yum install -y mariadb
  1. 连接测试
[root@node-137 ~]# mysql -uroot -phaha001 -h10.88.0.17
...
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| blog               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> exit
Bye

27.5 管理容器的命令

27.5.1 在容器中执行指定的命令

语法,

podman exec 容器名 命令

在容器中执行ip a|grep 'inet ',命令,

[root@node-137 ~]# podman exec db ip a|grep 'inet '
    inet 127.0.0.1/8 scope host lo
    inet 10.88.0.17/16 brd 10.88.255.255 scope global eth0

如果在容器中运行未安装的命令,则会报错

[root@node-137 ~]# podman exec db ifconfig
Error: exec failed: unable to start container process: exec: "ifconfig": executable file not found in $PATH: OCI runtime command not found error

获取shell控制台

[root@node-137 ~]# podman exec -it db bash
root@3c2fd1899118:/# ip a|grep 'inet '
    inet 127.0.0.1/8 scope host lo
    inet 10.88.0.17/16 brd 10.88.255.255 scope global eth0
root@3c2fd1899118:/# exit
exit
27.5.2 物理机和容器互相拷贝文件

语法,

podman cp /path/file 容器:/path2 把本地文件拷贝到容器
podman cp 容器:/path2 /path/file 把容器文件拷贝到本地
[root@node-137 ~]# podman exec db ls /opt
[root@node-137 ~]# podman cp /etc/hosts db:/opt/
[root@node-137 ~]# podman exec db ls /opt
hosts
[root@node-137 ~]# podman cp db:/opt/hosts /opt/
[root@node-137 ~]# ls /opt/
...  hosts     ...
[root@node-137 ~]# diff /opt/hosts /etc/hosts
27.5.3 关闭、启动和重启容器
[root@node-137 ~]# podman stop db
3c2fd18991183ba566378708ecd7247bbc982031b305c77edd02a78731982a51
[root@node-137 ~]# podman start db
db
[root@node-137 ~]# podman restart db
3c2fd18991183ba566378708ecd7247bbc982031b305c77edd02a78731982a51
[root@node-137 ~]# podman top db
USER    PID   PPID   %CPU    ELAPSED        TTY   TIME   COMMAND
mysql   1     0      0.000   6.686039701s   ?     0s     mariadbd
27.5.4 查看容器中的输出

查看容器输出的日志信息

podman log [-f] 容器名
-f 不间断输出

查看容器属性

podman inspect 容器名
27.5.5 数据卷的使用

在这里插入图片描述
当容器创建出来之后,会映射到物理机的某个目录(这个目录叫容器层)中,在容器中写的数据实际都存储在容器层,所以只要容器不被删除,在容器中写的数据就会一直存在。但是一旦删除容器,对应的容器层也会被删除。

如果希望数据能够永久保存,则需要配置数据卷,把容器中的指定目录挂载到物理机的某个目录上,如上图。

在创建容器时,使用-v选项指定数据卷,语法

-v /dir1 把物理机的一个随机目录映射到容器的/dir1目录中
-v /dir2:/dir1:Z 把物理机指定的目录/dir2映射到容器的/dir1目录中

物理机/dir2需要提前创建出来,而容器/dir1如果不存在则会自动创建。这里Z的意思是把物理机的目录/dir2的上下文改成container_file_t

[root@node-137 ~]# podman run -itd --name=alpine -v /data docker.io/library/alpine:latest
8d5cc7a4f87e38725eb458940f7de49aba42e5d2c7c705b69c4162688381213f
[root@node-137 ~]# podman inspect alpine |grep -A5 Mounts
        "Mounts": [
            {
                "Type": "volume",
                "Name": "a7357fa51d37a9fa34168fbf89d80af78f5f66bb58f02c54cac0ee1d695a1305",
                "Source": "/var/lib/containers/storage/volumes/a7357fa51d37a9fa34168fbf89d80af78f5f66bb58f02c54cac0ee1d695a1305/_data",
                "Destination": "/data",
[root@node-137 ~]# ls /var/lib/containers/storage/volumes/a7357fa51d37a9fa34168fbf89d80af78f5f66bb58f02c54cac0ee1d695a1305/_data
[root@node-137 ~]# cp /etc/hostname /var/lib/containers/storage/volumes/a7357fa51d37a9fa34168fbf89d80af78f5f66bb58f02c54cac0ee1d695a1305/_data
[root@node-137 ~]# podman exec alpine ls /data
hostname
[root@node-137 ~]# podman exec alpine cat /data/hostname
node-137
[root@node-137 ~]# podman run -itd --name=alpine -v /opt:/data docker.io/library/alpine:latest
fae37449d94ccbcdc8eeb5e6661b8b70794231e6cb4edfba359cc2b76f2e6cbb
[root@node-137 ~]# podman exec alpine ls /data
cni
containerd
...
hosts
...
[root@node-137 ~]# ll /opt/
total 17768
drwxr-xr-x. 3 root root       17 Jul 14 16:38 cni
drwx--x--x. 4 root root       28 Jul 17 14:20 containerd
...
-rw-r--r--  1 root root      422 Nov 22 18:43 hosts
...

27.6 使用普通用户对容器进行管理

切换用户登录如果出现:

[yurq@node-137 ~]$ podman images
cannot clone: Invalid argument
user namespaces are not enabled in /proc/sys/user/max_user_namespaces
Error: could not get runtime: cannot re-exec process

解决方法:

# centos 7默认关闭了 user namespace,需要手动打开
echo 10000 > /proc/sys/user/max_user_namespaces
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
echo "user.max_user_namespaces=10000" >> /etc/sysctl.conf

不同用户对镜像和容器的管理都是独立的,所以root的镜像并不能给普通用户使用

[root@node-137 ~]# su - yurq
Last login: Fri Nov 24 13:16:25 CST 2023 from 192.168.17.1 on pts/1
[yurq@node-137 ~]$ podman images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE
[yurq@node-137 ~]$ exit
logout
[root@node-137 ~]# podman save docker.io/library/alpine:latest > /opt/alpine.tar
[root@node-137 ~]# su - yurq
Last login: Fri Nov 24 13:19:13 CST 2023 on pts/0
[yurq@node-137 ~]$ podman load -i /opt/alpine.tar
Getting image source signatures
Copying blob 8d3ac3489996 done
Copying config c059bfaa84 done
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/alpine:latest
[yurq@node-137 ~]$ podman images
REPOSITORY                 TAG      IMAGE ID       CREATED         SIZE
docker.io/library/alpine   latest   c059bfaa849c   24 months ago   5.87 MB

所以普通用户可以通过重新拉取镜像或者从root导入镜像

以普通用户启动容器

[yurq@node-137 ~]$ podman run -dit --name=web --restart=always -v /home/yurq/web:/web:Z docker.io/library/nginx
f2c9cfc2e3d6aa2a9c6f363de9c9bc346bbd14df3374403a21235fb12107f7a4

现在容器创建好了,但这个容器在系统重启时不会随着系统一起启动。要让容器随着系统一起启动,需要为这个容器创建一个服务。

  1. 首先设置yurq创建的服务在系统启动时能自动启动,如下
[root@node-137 ~]# loginctl enable-linger yurq

可以通过loginctl disable-linger yurq关闭普通用的服务自启动

  1. 创建存储服务文件的目录,
[yurq@node-137 ~]$ mkdir -p ~/.config/systemd/user;cd ~/.config/systemd/user
  1. 为web容器生成一个服务文件,
[yurq@node-137 user]$ podman generate systemd --name web --files 
[yurq@node-137 user]$ ll
total 8
-rw-r--r-- 1 yurq yurq 538 Nov 24 15:25 container-web.service

这里可以加参数--new,该参数表示 即使现在把web容器删除,那么重启系统时也会自动创建这个容器,不过笔者这个版本的podman似乎不识别--new

这里的参数--name可以简写为-n--files可以简写为-f--new可以省略,所以简写后的命令,

[yurq@node-137 user]$ podman generate systemd -n web -f
/home/yurq/.config/systemd/user/container-web.service
  1. 重新加载这个服务文件,需要加上--user选项,
[yurq@node-137 user]$ systemctl --user daemon-reload

这里如果报错Failed to get D-Bus connection: No such file or directory,一般的解决方法是升级systemd,参考
https://blog.csdn.net/counsellor/article/details/128448999

  1. 设置开机自启动
[yurq@node-137 user]$ systemctl --user enable container-web.service
[yurq@node-137 user]$ systemctl --user status container-web.service
[yurq@node-137 user]$ systemctl --user disable container-web.service

重启操作系统,可以发现web容器随系统启动

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

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

相关文章

web静态网页设计与制作-基于HTML+CSS+JS实现旅游摄影网站

web静态网页设计与制作&#xff0c;基于HTMLCSSJS实现精美的旅游摄影网站&#xff0c;拥有极简的设计风格&#xff0c;丰富的交互动效&#xff0c;让人眼前一亮&#xff0c;享受视觉上的体验。 我使用了基本的HTML结构来构建网页&#xff0c;并使用CSS样式进行美化设计&#xf…

【JavaWeb】HTMLCSSJavaScript

HTML&CSS&JavaScript 文章目录 HTML&CSS&JavaScript一、开发工具及在线帮助文档二、 HTML2.1 HTML&CSS&JavaScript的作用2.2 HTML基础结构2.3 HTML概念词汇解释2.4 HTML的语法规则2.5 常用标签 三、CSS3.1 引入方式3.2 CSS选择器3.3 CSS浮动3.4 CSS定位…

【电路笔记】-分压器

分压器 文章目录 分压器1、概述2、负载分压器3、分压器网络4、无功分压器4.1 电容分压器4.2 感应分压器 5、总结 有时&#xff0c;需要精确的电压值作为参考&#xff0c;或者仅在需要较少功率的电路的特定阶段之前需要。 分压器是解决此问题的一个简单方法&#xff0c;因为它们…

抽象类, 接口, Object类 ---java

目录 一. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类特性 1.4 抽象类的作用 二. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口的使用 2.4 接口间的继承 2.5 抽象类和接口的区别 三. Object类 3.1 toString() 方法 3.2 对象比较equals()方法 3.3 hash…

人工智能-注意力机制之注意力提示

注意力提示 自经济学研究稀缺资源分配以来&#xff0c;人们正处在“注意力经济”时代&#xff0c; 即人类的注意力被视为可以交换的、有限的、有价值的且稀缺的商品。 许多商业模式也被开发出来去利用这一点&#xff1a; 在音乐或视频流媒体服务上&#xff0c;人们要么消耗注意…

【C语言】qsort的秘密

一&#xff0c;本文目标 qsort函数可以对任意类型数据甚至是结构体内部的数据按照你想要的规则排序&#xff0c;它的功能很强大&#xff0c;可是为什么呢&#xff1f; 我将通过模拟实现qsort函数来让你对这整个过程有一个清晰的深刻的理解。 二&#xff0c;qsort函数原型 v…

5-11一个球从100米自由落下

#include<stdio.h> int main(){double down100;double back down/2;int n;//次数for(n2;n<10;n){downdownback*2;backback/2; }printf("第10次落地经过%f米\n",down);printf("第10次反弹%f米\n",back);return 0;}

ArkTS-自定义组件学习

文章目录 创建自定义组件页面和自定义组件生命周期自定义组件和页面的区别页面生命周期(即被Entry修饰的组件)组件生命周期(即被Component修饰的组件) Builder装饰器&#xff1a;自定义构建函数按引用传递参数按值传递参数 BuilderParam装饰器&#xff1a;引用Builder函数 这个…

ruoyi-plus-vue部署

安装虚拟机 部署文档 安装docker 安装docker 安装docker-compose 可能遇到的错误 Failed to deploy ruoyi/ruoyi-server:5.1.0 Dockerfile: ruoyi-admin/Dockerfile: Cant retrieve im age ID from build stream 安装 vim 命令 yum install vim -y 修改文件 vim /etc/re…

Matlab通信仿真系列——离散信号和系统

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、离散信号 1、离散信…

pairplot

Python可视化 | Seaborn5分钟入门(七)——pairplot - 知乎 (zhihu.com) Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装&#xff0c;从而使得作图更加容易&#xff0c;不需…

喜报|AIRLOOK荣获“创客北京2023”创新创业大赛企业组三等奖

“创客北京2023”创新创业总决赛圆满落幕&#xff0c;埃洛克航空科技&#xff08;北京&#xff09;有限公司&#xff0c;&#xff08;以下统称AIRLOOK&#xff09;首次参赛即从几千家企业中脱颖而出&#xff0c;荣获大赛企业组三等奖。 自2016年开始&#xff0c;“创客北京”大…

U-Boot 之九 详解 Pinctrl 子系统、命令、初始化流程、使用方法

嵌入式芯片中,引脚复用是一个非常常见的功能,U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统来处理引脚复用功能。正好最近用到了这部分功能,需要移植 Pinctrl 驱动,特此记录一下学习过程。 架构 U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统,用来统一各芯…

内测分发平台如何保护用户隐私?

大家好&#xff0c;我是咕噜-凯撒&#xff0c;在软件开发的早期阶段&#xff0c;内测是一个至关重要的步骤。通过内测&#xff0c;开发者可以在产品正式上市前发现并修复bug&#xff0c;获取用户反馈优化用户体验。但是内测过程中往往会处理大量用户的敏感信息&#xff0c;尤其…

文献速递:非专业任务医生在审查X光片时受益于正确的可解释人工智能建议

非专业任务医生在审查X光片时受益于正确的可解释人工智能建议 01****文献速递介绍 本文主要探讨了人工智能&#xff08;AI&#xff09;在放射学中的应用&#xff0c;特别是在胸部X光片的诊断中AI临床决策支持系统&#xff08;AI-CDSS&#xff09;的作用。研究发现&#xff0c…

Java核心知识点整理大全10-笔记

往期快速传送门&#xff1a; Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客文章浏览阅读9w次&#xff0c;点赞7次&#xff0c;收藏7次。Java核心知识点整理大全https://blog.csdn.net/lzy302810/article/details/132202699?spm1001.2014.3001.5501 Java核心知识点整理…

多模态——使用stable-video-diffusion将图片生成视频

多模态——使用stable-video-diffusion将图片生成视频 0. 内容简介1. 运行环境2. 模型下载3. 代码梳理3.1 修改yaml文件中的svd路径3.2 修改DeepFloyDataFiltering的vit路径3.3 修改open_clip的clip路径3.4 代码总体结构 4. 资源消耗5. 效果预览 0. 内容简介 近期&#xff0c;…

[Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图

Latex 代码 \begin{figure}\begin{subfigure}[b]{0.32\textwidth}\centering\resizebox{\linewidth}{!}{\begin{tikzpicture}\coordinate (o) at (0,0);\coordinate (Si) at (2.5,2.5);\coordinate (x) at (1,0);\draw[->] (0,0) -- (3,0) node[right] {$x$};\draw[->] …

Java对象逃逸

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、相关知识3.1 逃逸…

FreeRTOS深入教程(信号量源码分析)

文章目录 前言一.创建信号量二.释放信号量三.获取信号量成功获取获取不成功 总结 前言 本篇文章将为大家讲解信号量&#xff0c;源码分析。 在 FreeRTOS 中&#xff0c;信号量的实现基于队列。这种设计的思想是利用队列的特性来实现信号量&#xff0c;因为信号量可以被视为只…