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.mzph.cn/web/37814.shtml

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

相关文章

为Ubuntu-24.04-live-server-amd64磁盘扩容

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 文章目录 系列文章目录前言一、检查系统本身情况1.用 lsblk 命令查看自己系统磁盘是什么状态2.用 df -h 命令查看文件系统的磁盘空间使用情况3.解决 Ubuntu-24.04 磁盘空间只能用一半的问题3-1扩展逻辑卷&#xff…

这才是CSDN最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

基于X86+FPGA+AI的智能仓储AGV机器人解决方案

应用场景 智能仓储是物流过程的一个环节,智能仓储的应用,保证了货物仓库管理各个环节数据输入的速度和准确性,确保企业及时准确地掌握库存的真实数据,合理保持和控制企业库存,其中搬运环节目前已大量采用AGV的方式进行…

python-逻辑语句

if else语句 不同于C:else if range语句: continue continue的作用是: 中断所在循环的当次执行,直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break,在…

星火认知大模型Spark3.5 api调用 #AI夏令营 #Datawhale #夏令营

环境安装 pip install --upgrade -q spark_ai_python 官网注册 链接:https://console.xfyun.cn/app/myapp 官方会在报名成功后,立即发放星火大模型 Spark Max的 API 额度助力我们完成赛事, 200w Tokens 任你花! 暑期有四场夏令营…

HDC Cloud 2024 | CodeArts加速软件智能化开发,携手HarmonyOS重塑企业应用创新体验

2024年6月21~23日,华为开发者大会HDC 2024在东莞溪流背坡村隆重举行。期间华为云主办了以“CodeArts加速软件智能化开发,携手HarmonyOS重塑企业应用创新体验”为主题的分论坛。论坛汇聚了各行各业的专家学者、技术领袖和开发者,共同探讨Harmo…

养殖自动化管理系统:开启智慧养殖新篇章

在现代农业的快速演进中,养殖业正经历一场前所未有的技术革命。养殖自动化管理系统,作为这场变革的前沿科技,正逐步成为推动行业高效、环保、可持续发展的关键力量。本文将深入探讨自动化养殖系统如何通过精准管理、智能监控、数据驱动决策&a…

SpringCloud_Ribbon负载均衡

概述 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 源码 LoadBalancerInterceptor 其中含有intercept方法,拦截用户的HttpRequest请求: request.getURI() 获取请求uri,即http://userservice/use…

3D Gaussian Splatting代码中的Gaussian_Module和Cameras两个类的代码解读

Gaussian_model 讨论Gaussian_model这个类,是因为里面包含了三维高斯分布的基本信息,里面定义了各种参量的构建方式、用于优化学习的激活函数、学习率设置方法和高斯点优化过程中的增加与删除方式及对应优化器的处理方法。这个类定义在scene文件夹中的g…

反激开关电源反馈电路相关参数选型

Vb的电压正常变化范围是:0-1V(最低0V,由于有稳压管,最高不会超过1V) Vb的电压越高,则输出占空比越大,Vb电压越低,则输出占空比越小 那么Va的正常变化范围应该是:1.4-4.…

云卓SKYDROID-H30——科技改变未来

云卓H30采用高通处理器、搭载安卓嵌入式系统,拥有三个工作频率,让图像更清晰、延迟更低、距离远、抗干扰性强,支持多种接口,更有10.1寸高清工业级阳光可视屏,防尘耐磨,结构强度高,适用于各种严苛…

Python和tkinter单词游戏

Python和tkinter单词游戏 数据字典文本文件,文件名为Dictionary.txt,保存编码格式为:utf-8。文本内容:每行一个 单词 ,单词和解释用空格分隔,如 a art.一(个);每一(个) ability n.能力&#…

springboot实验报告管理系统-计算机毕业设计源码10596

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

HarmonyOS Next开发学习手册——单选框 (Radio)

Radio是单选框组件,通常用于提供相应的用户交互选择项,同一组的Radio中只有一个可以被选中。具体用法请参考 Radio 。 创建单选框 Radio通过调用接口来创建,接口调用形式如下: Radio(options: {value: string, group: string})…

高考不是终点:如何利用教育资源实现人生跃迁?普鲁士教育的利弊,你了解吗?从科举到高考,中国教育的变迁!链接上层,获取核心资源的途径

高考已经结束,这两天分数将会陆续出来,无论结果好坏,我都希望你明白一些道理。这些道理在学校老师不会教你,但是非常重要。 一、中国的科举制度 科举制度是为王朝服务的。 科举制度是中国古代通过考试选拔官员的制度&#xff0c…

C++类型转换可调用对象

目录 C的四种可视性类型转换 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可调用对象 普通函数 函数指针 仿函数 Lambda表达式 包装器function bind C的四种可视性类型转换 C语言中的类型转换是不安全、不明确的,于是C就出了更…

MQTT QoS 0, 1, 2

目录 # 开篇 1. 精细MQS TT QoS的行为 1.1 QoS 0: 最多交付一次(At Most Once) 1.2 QoS 1: 至少交付一次(At Least Once) 1.3 QoS 2: 只交付一次(Exactly Once) 1.4 传输过程图示 1.5 总结 2. MQTT…

7-1作业

1.实验目的:完成字符收发 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符数据发送 void set_tt…

Web端登录页和注册页源码

前言&#xff1a;登录页面是前端开发中最常见的页面&#xff0c;下面是登录页面效果图和源代码&#xff0c;CV大法直接拿走。 1、登录页面 源代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>登录</ti…

每日复盘-20240701

今日关注&#xff1a; 20240701 六日涨幅最大: ------1--------301182--------- 凯旺科技 五日涨幅最大: ------1--------300977--------- 深圳瑞捷 四日涨幅最大: ------1--------300977--------- 深圳瑞捷 三日涨幅最大: ------1--------300461--------- 田中精机 二日涨幅最…