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 loinet 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 loinet 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.hqwc.cn/news/215292.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,《小白学程序》第六课:队列(Queue)其二,队列的应用,编写《实时叫号系统》

医院里面常见的《叫号系统》怎么实现的&#xff1f; 1 文本格式 /// <summary> /// 下面定义一个新的队列&#xff0c;用于演示《实时叫号系统》 /// </summary> Queue<Classmate> q2 new Queue<Classmate>(); /// <summary> /// 《小白学程序…

C语言——从终端(键盘)读入 20 个数据到数组中,统计其中正数的个数,并计算这些正数之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i0;int sum0;int count0;int arr[20];printf("输入20个数据&#xff1a;\n");for(i1;i<20;i){scanf("%d",&arr[i]);if(arr[i]>0){count;sumarr[i];}}printf("正…

插件预热 | 且看安全小白如何轻松利用Goby插件快速上分

001 前言 各位师傅们好&#xff0c;首先强调一遍我可没做坏事&#xff0c;我只是想学技术&#xff0c;我有什么坏心思呢 回到正题&#xff0c;作为一个初学者&#xff0c;我想和大家分享一下我是如何利用 Goby 进行刷分的经历。大家都知道&#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…

【matlab版本的ggplot2】

gramm (complete data visualization toolbox, ggplot2/R-like) 来源&#xff1a;Morel, Pierre. “Gramm: Grammar of Graphics Plotting in Matlab.” The Journal of Open Source Software, vol. 3, no. 23, The Open Journal, Mar. 2018, p. 568, doi:10.21105/joss.00568…

【C/PTA —— 10.函数1(课外实践)】

C/PTA —— 10.函数1&#xff08;课外实践&#xff09; 一.函数题6-1 符号函数6-2 求排列数6-3 求一个大于10的n位整数w的后n-1位的数&#xff0c;并作为函数值返回。6-4 其右上三角&#xff08;含主对角线&#xff09;元素之和。6-5 字符串比较6-6 使用函数求素数和6-7 使用函…

【C/PTA —— 11.函数2(课外实践)】

C/PTA —— 11.函数2&#xff08;课外实践&#xff09; 一.函数题6-1 计算A[n]1/(1 A[n-1])6-2 递归实现顺序输出整数6-3 自然数的位数(递归版)6-4 分治法求解金块问题6-5 汉诺塔6-6 重复显示字符(递归版)6-7 显示平行四边形(右)(递归版) 二.编程题7-2 N阶楼梯上楼问题 一.函数…

弹窗msvcp140_1.dll丢失的解决方法,超简单的方法分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是缺少某个文件的错误。最近&#xff0c;我在使用某些软件时&#xff0c;遇到了一个名为“msvcp140_1.dll”的错误提示。这个错误通常出现在运行某些程序时&#xff0c;由于缺少了msvcp140…

【腾讯云云上实验室】向量数据库与数据挖掘分析的黄金组合指南

前言&#xff1a; 在当今信息化时代&#xff0c;掌握对数据进行挖掘和分析的能力变得愈发关键。根据需求精准处理数据不仅仅是一项技能&#xff0c;更是对未来决策和操作的至关重要的支持。除了熟练运用适当的算法模型对大数据进行挖掘和分析外&#xff0c;合理高效存储和处理大…

【操作系统】线程的状态

目录 1.前言 2.状态列表 3.代码演示 1.前言 在线程中&#xff0c;有很多的状态。这些状态代表了线程目前所处的位置和情况&#xff0c;我们也可以通过这些状态&#xff0c;在以后的工作中&#xff0c;精准的定位到程序出现的问题。 2.状态列表 在Thread类所创建的对象中&a…

【电子通识】什么是物料清单BOM(Bill of Material))

BOM (Bill of Materials)是我们常说的物料清单。BOM是制造业管理的重点之一&#xff0c;用于记载产品组成所需要的全部物料&#xff08;Items&#xff09;。物料需求的计算是从最终产品开始&#xff0c;层层往下推算出部件&#xff0c;组件&#xff0c;零件和原材料的需求量。这…

[工业自动化-25]:IDEC和泉RU2S-24D/RU4S-24D继电器的使用说明和接线方式

目录 一、外观 1.1 继电器整体&#xff1a; 1.2 继电器主体&#xff1a; 1.3 底座&#xff1a; 二、RU系列通用继电器介绍 2.1 总体 2.2 性能规格 2.3 锁存杆 2.4 信号定义与连线 - 2S系列 &#xff08;1&#xff09;24V输入 &#xff08;2&#xff09;第一路输出 …