RedHat9 | podman容器-续集

在这里插入图片描述

一、管理容器存储和网络资源

使用容器来运行简单的进程,然后退出。可以配置容连续运行特定服务,如数据库服务。如果持续运行服务,需要向容器添加更多的资源,如持久存储或对其他网络的访问权限。

  • 针对企业容器平台上的大型部署:使用复杂的存储解决方案为容器提供存储,而无需了解底层架构。
  • 针对单个容器主机的小型部署:通过在运行的容器上创建要挂载的目录,从容器主机创建持久存储。

当Web服务器或数据库服务器等容器需要为外部客户端提供服务时,需要客户端设置通信通道,以访问容器的内容。可以通过配置端口映射,以启用与容器的通信。通过端口映射,将容器主机上的端口球球转发到容器内的端口。

容器的环境变量

容器镜像允许在创建时传递环境变量以自定义容器。可以使用环境变量为容器设置相关参数,根据自己的环境进行定制,无需创建自己的自定义镜像。通常不会修改容器镜像,因为这会在镜像中添加层,使其更加难以维护。

当一个容器需要在创建时指定变量,直接创建容器时会启动失败

查看容器镜像,可以发现存在一个mariadb-105镜像

podman search registry.lab.example.com/

在这里插入图片描述

直接创建并运行容器,因为该镜像不在本地,podman会先下载镜像然后才创建容器

podman run -d --name db01 registry.lab.example.com/

在这里插入图片描述

查看容器db01的状态,可以看到状态为Exited

podman ps -a

在这里插入图片描述

查看容器的日志

podman logs db01
podman container logs db01
  • MYSQL_USER:要创建的MySQL账户的用户名
  • MYSQL_PASSEORD:用户账户的密码
  • MYSQL_DATABASE:数据库名称
  • MYSQL_ROOT_PASSWORD:root管理员密码

在这里插入图片描述

先删除刚刚创建的容器

podman rm -f db01

在这里插入图片描述

重新创建容器并传递环境变量

podman run -d --name db01 -e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db1 -e MYSQL_ROOT_PASSWORD=redhat@123 registry.lab.example.com/rhel8/mariadb-105

在这里插入图片描述

二、容器持久存储

在默认情况下,运行容器时,存储的所有内容都基于容器的镜像。容器镜像的寿命比较短,用户或应用写入的所有的新数据都会在移除容器后丢失。如果要持久保存数据,通过将容器中的主机系统内容与–volume(-v)选项搭配使用。在容器中使用此卷类型时,必须考虑文件系统级别的权限。

在Mariadb容器镜像中,mysql用户必须拥有/var/lib/mysql目录,等同于Mariadb数据库在主机上运行。挂载到容器中的目录必须具有mysql作为用户或组所有者。如果以root运行容器,则主机上的UID和GID与容器内的UID和GID匹配。意思是,如果要将主机中的目录挂载到容器中,尽量保证内外的属主和属组一致。在Mariadb数据库中,数据的存储目录为/var/lib/mysql。

1、容器存储的SELinux上下文

如果要在本机上存储容器数据, 则必须要给主机文件夹设置安全上下文(container_file_t),然后才能将该目录作为持久存储挂载到容器中。如果主机目录没有设置安全上下文,则容器无法访问该目录。通过在-v选项中附加Z参数,可以自动设置SELinux上下文。
一共有两种参数,分别是:Z:z

  • :Z:选项用于将指定的安全上下文设置为挂载点或文件的值。当使用:Z时,Podman会更改挂载点或文件的安全上下文,以确保容器可以访问指定的主机文件系统路径,并具有正确的SELinux权限。会将文件或目录安全上下文更改为container_file_t
  • :z:这个选项用于将当前SELinux安全上下文传播给容器中的挂载点或文件。当使用:z时,Podman会将主机上的安全上下文直接传播到容器中的挂载点或文件,以确保容器内的进程具有与宿主机相同的安全上下文。

使用:Z实际上是指定了:z选项的默认值(container_file_t),将默认的SELinux安全上下文应用于挂载点或文件。

在大多数情况下,如果你只是想让容器能够访问主机上的目录或文件,并且不关心具体的安全上下文,那么使用:Z是一个简单而安全的选择。如果你需要更精细地控制安全上下文,或者需要确保容器内的进程具有与主机具有相同的安全上下文,那么可以使用:z选项。

2、用户命名空间的UID映射

podman unshare cat /proc/self/uid_map    	# 获取用户命名空间的UID映射
podman unshare cat /proc/self/gid_map    	# 获取用户命名空间的GID映射

可以看到,容器中的root用户(UID=GID=0)映射到主机计算机上的用户为(UID=GID=1000);容器中的UID=GID=1映射到主机计算机上为(UID=GID=100000)。

  • UID换算规则:容器的UID+99999
  • GID换算规则:容器的GID+99999

在这里插入图片描述

3、分配端口映射到容器

要提供对容器的网络访问权限,客户端必须连接到容器主机上的端口,这些端口将网络流量传递到容器中的端口。将容器主机上的网络端口映射到容器中的端口时,容器将接收发送到主机网络端口的网络流量。

4、容器中的网络配置

Podman4.0中支持两种容器网络后端,分别是Netavark和CNI。在RedHat9中,系统默认使用Netavark。

podman info --format {{.Host.NetworkBackend}}

在这里插入图片描述

创建容器网络

podman network create --gateway 192.168.10.254 --subnet 192.168.10.0/24 db_net
  • podman network create:创建网络
  • –gateway 192.168.10.254:指定网关
  • –subnet 192.168.10.0/24:指定网段
  • db_net:网络名称

列出容器网络

podman network ls

在这里插入图片描述

查看容器网络的详细信息

podman network inspect podman

在这里插入图片描述

容器持久化存储的步骤

  1. 主机建立目录
  2. 给主机目录设置UID和GID
  3. 创建虚拟网络
  4. 新建容器,指定容器的挂载目录和映射端口,自动调整主机目录的SELinux安全上下文
    在这里插入图片描述

先删除当前存在的所有容器

podman rm -f -a

先在本机新建存储目录

如果想要容器可以访问主机的目录,则首先需要容器中的用户具备对主机目录的访问权限

mkdir /home/student/mysql_db

在这里插入图片描述

先临时创建一个Mariadb数据库容器

podman run -d --name db01 -e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db -e MYSQL_ROOT_PASSWORD=redhat@123 registry.lab.example.com/rhel8/mariadb-105

查看容器密码文件中的mysql用户的UID和GID,得出UID和GID都为27

podman exec -it db01 grep mysql /etc/passwd

在这里插入图片描述

查看容器中Mariadb服务的监听端口号

podman exec -it db01 ss -tlnp 

在这里插入图片描述

给主机目录设置属组和属主

podman unshare chown 27:27 /home/student/mysql_db

在这里插入图片描述

创建Mariadb容器的参考语句可以借鉴容器介绍中的usage字段

skopeo inspect docker://registry.lab.example.com/rhel8/mariadb-105 | grep usage

在这里插入图片描述

新建容器,指定容器的挂载目录和映射端口,自动调整主机目录的SELinux安全上下文

podman run -d --name db02 -e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db -e MYSQL_ROOT_PASSWORD=redhat@123 -v /home/student/mysql_db:/var/lib/mysql:Z -p 13306:3306 registry.lab.example.com/rhel8/mariadb-105
  • -v /home/student/mysql_db:/var/lib/mysql:Z
    • -v:挂载目录
    • /home/student/mysql_db:主机的目录
    • /var/lib/mysql:容器中的目录
    • :Z:自动为主机目录添加安全上下文
    • -p 13306:3306:将主机的13306端口映射到容器中的3306端口
      在这里插入图片描述

查看主机挂载目录的安全上下文

ll -dZ /home/student/mysql_db

在这里插入图片描述

查看容器的端口映射关系

podman port -a

在这里插入图片描述

调整防火墙规则

sudo firewall-cmd --add-port=13306/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

在这里插入图片描述

使用本地主机测试访问容器数据库服务

sudo dnf install mariadb -y		# 安装Mariadb软件
mysql -u user -predhat -h 127.0.0.1 -P 13306
  • mysql:登录数据库
  • -u user:指定登录用户名
  • -predhat:指定密码
  • -h localhost:指定登录主机
  • -P 13306:指定登录端口号
    在这里插入图片描述

使用异地主机远程访问容器数据库服务

sudo dnf install -y mariadb
mysql -u user -predhat -h 172.25.250.10 -P 13306

在这里插入图片描述

三、作为系统服务来管理容器

将容器配置为systemd服务,并将容器服务配置为在系统启动时自动启动。如果希望可以无限期运行服务的容器,如Web服务器或数据库,特权用户通常将这些服务配置为在系统启动时运行,使用systemctl命令进行管理。作为普通用户,可以通过创建systemd单元来配置Rootless容器。通过此配置,可以通过systemctl命令将容器作为常规系统服务进行管理。基于systemd单元管理容器主要用于不需要扩展的基本和小型部署。如果存在的容器过多和服务更加复杂,则可以使用Kubernetes的企业编排平台。

systemd服务分类

  • 普通用户使用systemctl命令来启动服务,服务会在打开会话时启动,在关闭最后一个会话时间停止。
  • 系统服务则会在系统启动时启动,在系统关闭时停止。

首先需要在用户家目录下创建单元文件目录,然后进入目录

mkdir -p ~/.config/systemd/user/
cd ~/.config/systemd/user/

使用podman generate systemd生成单元文件

podman generate systemd -n ConName -f
  • podman generate systemd:生成单元文件
  • -n ConName:容器名
  • -f:生成文件

使用普通用户来生成单元文件,如果用户从系统注销,systemd服务会在特定时间后停止容器。因为systemd服务单元是使用.user选项创建的,在用户登录时启动服务,并在用户注销时停止服务。可以通过运行loginctl enable-linger命令来更改此默认行为并强制已启用的服务在服务器启动时启动,并在服务器关闭时停止。

创建一个redhat9容器

podman run -d --name redhat9_con registry.lab.example.com/ubi9-beta/ubi:latest

进入用户家目录,创建容器服务

cd ~/.config/systemd/user
podman generate systemd -n redhat9_con -f

更改默认行为,为所配置服务的用户注销后服务保留

loginctl enable-linger
loginctl show-user student		# 验证命令是否配置成功

在这里插入图片描述

验证:注销当前student用户,再次使用student用户登陆,可以看到redhat9_con容器状态依旧是Up(我们没有将该容器你设置为开机自启)
在这里插入图片描述

四、临时使用容器

如果只是临时某个容器,在容器使用完就自动删除,可以添加–rm选项

创建一个redhat9容器,查看完容器的版本号就删除容器

podman run --rm registry.lab.example.com/ubi9-beta/ubi cat /etc/redhat-release

在这里插入图片描述

五、综合案例–Mariadb数据库服务

案例说明

在这里插入图片描述

1、登录podman

登录podman

podman login -u admin -p redhat321 registry.lab.example.com

验证:查看podman登录

podman login --get-login

在这里插入图片描述

2、创建容器网络

创建容器网络

podman network create --subnet 192.168.10.0/24 --gateway 192.168.10.254 ConNet

验证:查看容器网络的详细信息

podman network inspect ConNet

在这里插入图片描述

3、创建Mariadb数据库容器

主机上创建数据存储目录

mkdir /home/student/db_data
podman unshare chown 27:27 /home/student/db_data

验证:查看主机目录的权限

ll -d /home/student/db_data

在这里插入图片描述

查找创建容器模板

podman inspect registry.lab.example.com/rhel8/mariadb-105 | grep usage

在这里插入图片描述

创建数据库容器

podman run -di --name mariadb_con --network ConNet -e MYSQL_USER=mike -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=db1 -p 13307:3306 -v /home/student/db_data:/var/lib/mysql:Z registry.lab.example.com/rhel8/mariadb-105

验证:-查看数据库容器状态

podman ps

在这里插入图片描述

验证:查看容器的网络信息

podman exec -it mariadb_con ip add show eth0

在这里插入图片描述

验证:查看容器的详细信息

podman inspect mariadb_con		# 查看Netwokrs字段内容

在这里插入图片描述

4、创建RedHat9容器

先查看容器镜像仓库中的容器镜像

podman search registry.lab.example.com/

在这里插入图片描述

创建RedHat9容器

podman会先下载容器镜像,然后才会创建容器,这里我们只需要容器具有仓库文件的读权限,而不需要有写权限,所以无需修改SELinux安全上下文。

podman run -di --name redhat9_con --network ConNet -v /etc/yum.repos.d/:/etc/yum.repos.d/ registry.lab.example.com/ubi9-beta/ubi

在这里插入图片描述

验证:查看容器状态

podman ps

在这里插入图片描述

查找相关命令的来源包

dnf provides ping
dnf provides ip

在这里插入图片描述

容器安装相关包

podman exec -it redhat9_con dnf install -y iputils iproute

验证:查看容器的网络信息

podman exec -it redhat9_con ip add show eth0
podman exec -it redhat9_con ping 192.168.10.1 -c3

在这里插入图片描述

验证:测试DNS解析

podman exec -it redhat9_con ping mariadb_con -c3

在这里插入图片描述

主机上调整防火墙策略

sudo firewall-cmd --add-port=13307/tcp --permanent
sudo firewall-cmd --reload

验证:查看当前防火墙策略

sudo firewall-cmd --list-ports

在这里插入图片描述

5、跨容器服务访问

先在redhat9_con容器中安装Mariadb服务

podman exec -it redhat9_con dnf install -y mariadb

在redhat9_con容器中访问mariadb_con容器中的mariadb服务

podman exec -it redhat9_con /bin/bash		# 开启伪终端
mysql -u mike -predhat -h 192.168.10.1

在这里插入图片描述

6、给Mariadb容器添加多一个容器网络

创建容器网络

podman network create --subnet 192.168.20.0/24 --gateway 192.168.20.254 ConNet2

验证:查看容器网络的详细信息

podman network inspect ConNet2

在这里插入图片描述

为Mariadb容器添加网络

podman network connect ConNet2 mariadb_con

验证:查看容器的网络信息

podman inspect mariadb_con

在这里插入图片描述

六、综合案例–Nginx数据库服务

案例拓扑

先将本地所有的容器删除

podman rm -f -a

在这里插入图片描述

1、登录podman

登录podman

podman login registry.lab.example.com

验证:查看登录

podman login --get-login

在这里插入图片描述

2、主机准备

创建主机的本地挂载目录

mkdir -p /home/student/appdev-adm/nginx_web

在挂载目录中添加索引页

echo nginx_web_page > /home/student/appdev-adm/nginx_web/index.html

3、创建nginx容器

查看容器镜像仓库

podman search 

在这里插入图片描述

创建nginx容器并运行

需要在-v选项中指定:Z,为挂载目录添加SELinux安全上下文,否则SELinux 会阻止容器访问挂载的主机目录

podman run -d --name nginx_con -v /home/student/appdev-adm/nginx_web/:/usr/share/nginx/html:Z -p 8080:80 registry.lab.example.com/library/nginx

验证:查看容器状态

podman ps

在这里插入图片描述

验证:本地访问nginx_con容器中的nginx服务

curl localhost:8080

在这里插入图片描述

4、容器即服务

**新建用户systemd单元文件存储目录 **

mkdir -p ~/.config/systemd/user
cd ~/.config/systemd/user

创建容器单元文件

podman generate systemd -n nginx_con -f

验证:查看当前目录下生成的单元文件
在这里插入图片描述

验证:将容器暂停,然后通过systemctl启动

podman stop nginx_con
systemctl --user start container.nginx_con.service		# --user:用户级别启动

在这里插入图片描述

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

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

相关文章

汽车零部件材料耐候性测试氙光太阳辐射系统试验箱

概述 汽车零部件等领域的材料耐候性测试是一项关键的质量控制环节,它关乎汽车部件在各种气候条件下的性能表现和寿命。塑料件光照老化实验箱,即氙灯老化试验箱,在其中扮演着至关重要的角色。通过模拟自然环境中的光照、温度、湿度等条件&…

遇到多语言跨境电商系统源码问题?这里有解决方案!

从手机到电脑,从线下到线上,如今,跨境电商正在打破地域界限,成为全球贸易的新引擎。在这个全球化的背景下,跨境电商平台的运营也面临着一系列的挑战,其中之一就是多语言问题。如果你遇到了多语言跨境电商系…

【HALCON】如何实现hw窗口自适应相机拍照成像的大小

前言 在开发一个喷码检测软件的时候碰到相机成像和hw窗体的大小不一致,hw太小显示不完全成像的图片,这使得成像不均匀,现场辨别起来比较不直观,因此需要对其进行一个调整。 解决 省略掉读取图片的环节,我们只需要将…

全国产化飞腾模块BIOS下修复系统启动文件

1、背景介绍 全国产飞腾模块采用麒麟信安操作系统,当系统下面的grub.cfg文件被用户误操作导致无法启动时,可以在BIOS下通过U盘中备份的grub.cfg替换硬盘上原来的grub.cfg文件,从而实现启动。 2、操作步骤 首先进入BIOS命令行模式&#xff…

2.3章节Python中的数值类型

1.整型数值 2.浮点型数值 3.复数   Python中的数值类型清晰且丰富,主要分为以下几种类型,每种类型都有其特定的用途和特性。 一、整型数值 1.定义:整数类型用于表示整数值,如1、-5、100等。 2.特点: Python 3中的…

Ubuntu(通用)—网络加固—ufw+防DNS污染+ARP绑定

1. ufw sudo ufw default deny incoming sudo ufw deny in from any to any # sudo ufw allow from any to any port 5353 protocol udp sudo ufw enable # 启动开机自启 # sudo ufw reload 更改后的操作2. 防ARP欺骗 华为云教程 arp -d删除dns记录arp -a显示arp表 ipconfi…

拆分盘投资策略解析:机制、案例与风险考量

一、引言 随着互联网技术的迅猛发展和金融市场的不断创新,拆分盘这一投资模式逐渐崭露头角,成为投资者关注的焦点。它基于特定的拆分策略,通过调整投资者持有的份额和单价,实现了看似稳健的资产增长。本文旨在深入探讨拆分盘的运…

MySQL-数据操作类型的角度理解 S锁 X锁

文章目录 1、S锁和S锁互相兼容2、S锁和X锁互斥3、X锁和X锁也互斥4、X锁和S锁也互斥5、select * from account for update;6、select * from account for update nowait;7、select * from account for update skip locked; 1、S锁和S锁互相兼容 2、S锁和X锁互斥 3、X锁和X锁也互…

在线疫苗预约小程序的设计

管理员账户功能包括:系统首页,个人中心,工作人员管理,管理员管理,用户管理,疫苗管理,论坛管理,公告管理 微信端账号功能包括:系统首页,公告,疫苗…

K 近邻、K-NN 算法图文详解

1. 为什么学习KNN算法 KNN是监督学习分类算法,主要解决现实生活中分类问题。根据目标的不同将监督学习任务分为了分类学习及回归预测问题。 KNN(K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法…

【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?

文章目录 一、什么是内存抖动?内存抖动的问题卡顿OOM(Out Of Memory)二、什么是内存泄漏(Memory Leak)?引用计数法可达性分析法一、什么是内存抖动? 在Java中,每创建一个对象,就会申请一块内存,存储对象信息; 每分配一块内存,程序的可用内存也就少一块; 当程序…

(1)Jupyter Notebook 下载及安装

目录 1. Jupyter Notebook是什么?2. Jupyter Notebook特征3. 应用3. 利用Google Colab安装Jupyter Notebook3.1 什么是 Colab?3.2 访问 Google Colab 1. Jupyter Notebook是什么? 百度百科: Jupyter Notebook(此前被称为 IPython …

C语言部分复习笔记

1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高,p先和 [] 结合说明p是一个数组,p先和*结合说明p是一个指针 括号保证p先和*结合,说明p是一个指针变量,然后指…

R语言 | 使用ggplot绘制柱状图,在柱子中显示数值和显著性

原文链接:使用ggplot绘制柱状图,在柱子中显示数值和显著性 本期教程 获得本期教程示例数据,后台回复关键词:20240628。(PS:在社群中,可获得往期和未来教程所有数据和代码) 往期教程…

Windows宝塔面板部署ThinkPHP8.0创建Vue项目案例

安装ThinkPHP8.0 登录宝塔面板,创建一个站点。 输入composer代码,执行完成后自动创建TP目录 composer create-project topthink/think tp 网站目录设置为tp,运行目录设置为public 设置PHP版本为8.0以上,不然会出现下面的报错代…

1-5题查询 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例题2.1.可回收且低脂的产品2.2.寻找用户推荐人2.3.大的国家2.4. 文章浏览 I2.5. 无效的推文 1. 相关知识点 sql判断,不包含null,判断不出来distinct是通过查询的结果来去除重复记录ASC升序计算字符长度 CHAR_LENGTH() 或 LENGTH(…

js实现blockly后台解释器,可以单步执行,可以调用c/c++函数

实现原理 解析blockly语法树,使用js管理状态,实际使用lua执行,c/c函数调用使用lua调用c/c函数的能力 可以单行执行 已实现if功能 TODO for循环功能 函数功能 单步执行效果图 直接执行效果图 源代码 //0 暂停 1 单步执行 2 断点 //创建…

[无广告!纯干货]免费用CodeFlying自动化生成一个专属的AI机器人

前言: 真心话,花3分钟看文章,再花5分钟体验,你会回来给我点赞的。 随着AIGC(人工智能生成内容)行业的迅猛发展,人工智能正在以前所未有的速度和方式改变我们的生活。 它不仅在娱乐、教育、医疗…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8275 标注数量(xml文件个数):8275 标注数量(txt文件个数):8275 标注…

汇聚荣拼多多电商好不好?

拼多多电商好不好?这是一个值得探讨的问题。拼多多作为中国领先的电商平台之一,以其独特的商业模式和创新的营销策略吸引了大量用户。然而,对于这个问题的回答并不是简单的好或不好,而是需要从多个方面进行综合分析。 一、商品质量 来看拼多…