RHCE8 资料整理(八)

news2024/11/23 10:55:45

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容器随系统启动

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

积分球吸收光谱测量的领域有哪些?

积分球吸收光谱测量是一种常用的吸收光谱测量方法&#xff0c;它通过将样品放置在积分球的入口处&#xff0c;球内的光线经过多次反射后形成均匀的照度分布&#xff0c;然后使用光度计或光谱仪对光线进行测量&#xff0c;可以获得样品的相关参数。 在积分球吸收光谱测量中&…

2023.11.24 海豚调度,postgres库使用

目录 海豚调度架构dolphinscheduler DAG(Directed Acyclic Graph)&#xff0c; 个人自用启动服务 DS的架构(海豚调度) 海豚调度架构dolphinscheduler 注:需要先开启zookeeper服务,才能进行以下操作 通过UI进行工作流的配置操作, 配置完成后, 将其提交执行, 此时执行请求会被…

【C语言】qsort的秘密

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

JDBC编程方法及细节

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言用于连接和操作数据库的API&#xff08;Application Programming Interface&#xff09;。它为开发人员提供了一组Java类和接口&#xff0c;用于与各种关系型数据库进行通信。使用JDBC&#xff0c;开发人…

【Linux】fork()

文章目录 一、fork()是什么&#xff1f;二、fork()干了什么&#xff1f;三、fork()怎么用&#xff1f; 一、fork()是什么&#xff1f; fork()函数其实是在Linux系统中用于创建一个新的进程。让我们看看Linux中是怎么描述的&#xff1f;运行man fork。 RETURN VALUE On success…

探究Kafka原理-3.生产者消费者API原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

github国内访问小解(windows)

git 下载安装 使用 github 前必须确保电脑上已经安装了 Git&#xff0c;可以从 Git 官方网站去下载。 官方的网站在国内访问会比较慢&#xff0c;这里可以选择国内镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ github 之旅 确认电脑已…

使用向日葵开机棒进行远程开机

文章目录 1\. 前言2\. 说明3\. 开机棒设置4\. 电脑端设置4.1. 电脑端允许网卡唤醒4.1.1. 关闭设备节能4.2. 将电脑端设备加入设备列表 5\. 手机端5.1. 添加开机棒5.2. 绑定主机5.2.1. 添加成功的主机 6\. 唤醒 1. 前言 如果我们出差在外或者人不在实验室&#xff0c;如果可以使…

Spring 七大组件

文章目录 Spring 七大组件 Spring 七大组件 核心容器(Spring core) 核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean&#xff0c;它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式…

Linux python安装 虚拟环境 virtualenv,以及 git clone的 文件数据, 以及 下资源配置

根目录创建 venvs 文件夹 sudo mkdir /venvs 进入 /venvs 目录 cd /venvsp 创建虚拟环境&#xff0c;前提要按照 python3 安装 的 命令 sudo apt install python3 sudo python3 -m venv 虚拟环境名 激活虚拟环境 source /venvs/zen-venv/bin/activate 安装flask pip install fl…

测试工具JMeter的使用

目录 JMeter的安装配置 测试的性能指标 TPS 响应时长 并发连接 和 并发用户 CPU/内存/磁盘/网络 负载 性能测试实战流程 JMeter JMeter快速上手 GUI模式 运行 HTTP请求默认值 录制网站流量 模拟间隔时间 Cookie管理器 消息数据关联 变量 后置处理器 CSV 数据文…

Spring AOP:什么是AOP? 为什么要用AOP?如何学习AOP?

文章目录 &#x1f386;前言1.为什么要用 AOP3.如何学习去 AOP?3.1 AOP 的组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 3. Spring AOP 实现3.1 普通的方式实现 …

切换服务器上自己用户目录下的 conda 环境和一个外部的 Conda 环境

如果我们有自己的 Miniconda 安装和一个外部的 Conda 环境&#xff08;比如一个全局安装的 Anaconda&#xff09;&#xff0c;我们可以通过修改 shell 环境来切换使用它们。这通常涉及到更改 PATH 环境变量&#xff0c;以便指向你想要使用的 Conda 安装的可执行文件&#xff1a…

二维数值型数组例题2

1、内部和 题目描述 给定一个m行n列的二维矩阵&#xff0c;求其内部元素和 输入要求 第一行为两个整数&#xff1a;m和n&#xff08;0<m,n<10&#xff09;&#xff0c;接下来输入m*n的二维矩阵 输出要求 二维矩阵内部元素和 输入样例 3 3 1 2 3 4 5 6 7 8 9 …

2023年11月18日~11月24日周报(调试OpenFWI代码)

目录 一、前言 二、完成情况 2.1 OpenFWI工程文件框架的理解 2.2 InversionNet网络的理解 2.3 dataset.py的理解 三、遇到的部分问题及解决 3.1 数据读取 3.2 Dataloader中设置num_workers-MemoryError 3.3 RuntimeError: CUDA out of memory 3.4 loss值的变化 四、相…

MySQL介绍及安装

MySQL介绍及安装 一、MySQL概述 1、关系型数据库与非关系型数据库 RDBMS&#xff08;relational database management system&#xff09;&#xff0c;既关系型数据库管理系统。 简单来说&#xff0c;关系型数据库&#xff0c;是指采用了二维表格来组织数据的数据库。 扩展…

Codeforces Round 786 (Div. 3) D. A-B-C Sort

D. A-B-C Sort 步骤 1 &#xff1a;当 a不为空时&#xff0c;从 a中取出最后一个元素&#xff0c;并将其移动到数组 b的中间。如果 b 当前长度为奇数&#xff0c;则可以选择&#xff1a;将 a 中的元素放到 b 中间元素的左边或右边。结果&#xff0c; a 变空&#xff0c; b 由 n…

SAS9.2软件“OLE:对象的类没有在注册数据库中注册“问题的解决. 2023-11-24

操作系统平台: win7 sp1 32bit (6.1.7601.26321 (Win7 RTM)) 1.安装依赖库(必须) Microsoft Visual C 2005 Redistributable Microsoft Visual C 2008 Redistributable 官方下载地址: 最新受支持的 Visual C 可再发行程序包下载 | Microsoft Learn 2.以管理员权限启动cmd.e…

Python常见报错以及解决方案梳理,快滚进收藏夹里吃灰吧!

前言 使用python难免会出现各种各样的报错&#xff0c;以下是Python常见的报错以及解决方法&#xff08;持续更新&#xff09;&#xff0c;快进入收藏吃灰吧&#xff01; AttribteError: ‘module object has no attribute xxx 描述:模块没有相关属性。可能出现的原因: 1.命…

[黑马程序员SpringBoot2]——原理篇1

目录&#xff1a; bean的加载方式(—)bean的加载方式(二)bean的加载方式(三)FactoryBeanproxyBeanMethod属性bean的加载方式(四)bean的加载方式(五)bean的加载方式(六)bean的加载方式(七)bean的加载方式(八)bean加载控制&#xff08;编程式)bean加载控制&#xff08;注解式)be…