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.mfbz.cn/a/762794.html

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

相关文章

数据资产安全策略的定制化之道:深入了解各企业独特需求,量身打造个性化的数据资产保护方案,确保数据安全无虞,助力企业稳健发展

目录 一、引言 二、企业数据资产安全现状分析 (一)数据安全风险多样化 (二)传统安全措施难以满足需求 (三)企业数据资产安全意识亟待提高 三、定制化数据资产安全策略的重要性 (一&#…

SuperMap GIS基础产品FAQ集锦(20240701)

一、SuperMap iDesktopX 问题1:对于数据提供方提供的osgb格式的数据,如何只让他生成一个s3mb文件呢?我用倾斜入库的方式会生成好多个s3mb缓存文件 11.1.1 【解决办法】不能控制入库后只生成一个s3mb文件;可以在倾斜入库的时候设…

永磁同步电机离线参数识别

引言 永磁同步电机(PMSM)因其结构简单、功率密度高、转矩惯量比大和效率高等优点,在工业生产、航空航天和新能源交通等领域得到了广泛应用。然而,传统的参数辨识方法依赖位置传感器,这不仅增加了硬件成本,…

如何借用物联网快速实现高标准农田信息化

如何借用物联网快速实现高标准农田信息化 高标准农田信息化,作为现代农业发展的重要基石,是指在建设高产、稳产、节水、环保的农田基础上,深度融合现代信息技术,实现农田管理的精准化、智能化和高效化。物联网(Intern…

sql server启动、连接 与 navicat连接sql server

一、sql server 启动 1.搜索cmd->以管理员身份运行 2.输入以下命令 net start mssqlserver 3.服务器启动成功 二、sql server连接 1.打开ssms,输入,连接 2.右键,属性 3.连接,勾选允许远程连接到此服务器 三、navicat连接sq…

20人团队如何免费使用 Atlassian 云产品?

企业赚钱越来越难,尤其是初创团队或小型团队更倾向于使用免费工具支持业务。团队规模影响协作复杂度,Atlassian 考虑到小团队的需求,提供了多种选择。比如,Jira 和 Confluence 的云版本有免费版,包含基本的项目管理功能…

三坐标测量机:柔性生产制造中的高精度测量解决方案

柔性生产制造是制造业的核心竞争力之一。它强调生产线的灵活性和适应性,以满足市场对产品多样化和个性化的需求。在当今快速变化的工业环境中,随着消费者对产品个性化和定制化需求的增加,柔性生产制造和三坐标测量机的结合,为智能…

MSVCR120.DLL丢失的多种修复方法,助你快速解决dll问题

在日常生活和工作中,电脑已经成为我们不可或缺的工具。然而,在使用电脑的过程中,我们常常会遇到一些问题,其中之一就是电脑运行软件时提示找不到msvcr120.dll。如果该文件缺失或损坏,可能会导致依赖它的应用程序无法启…

大聪明教你学Java | 深入浅出聊 RocketMQ

前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言&#x1f4…

一、课程介绍,基础—环境安装、判断、循环语句等(爬虫及数据可视化)

一、课程介绍,基础—环境安装、判断、循环语句等(爬虫及数据可视化) 1. 课程介绍1.1 相关内容1.2 学习目标1.3 学习内容安排 2. python2.1 环境配置2.2 标识符和关键字2.3 运算符2.4 判断语句2.5 循环语句 1. 课程介绍 1.1 相关内容 10天的…

Node.js安装及配置

文章目录 1.安装Node.js2.创建目录3.配置环境变量4.配置全局安装路径和缓存路径(可选)配置Webstorm 1.安装Node.js https://registry.npmmirror.com/binary.html?pathnode 推荐安装18.x版本 2.创建目录 下载解压后进入目录,创建node_global和node_cache两个空文…

AI播客下载:Practical AI(人工智能最新进展)

Practical AI这是由 http://Changelog.com推出的节目。Changelog 本身做了许多跟软件开发的 podcast 节目 。比如《The Changelog》播客 ,这是一个专注于软件领域的播客,每周一发布最新新闻摘要,周三进行深入技术访谈,周五则是访谈…

Vue-element 组件dialog右上角点击 X 清空表单校验信息

问题: 点击确定触发校验后,点击弹窗右上角的 X号关闭弹窗后再次打开弹窗,校验规则没有被清空 解决方法:

Linux——数据流和重定向,制作镜像

1. 数据流 标准输入( standard input ,简称 stdin ):默认情况下,标准输入指从键盘获取的输入 标准输出( standard output ,简称 stdout ):默认情况下,命令…

每日复盘-20240701

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

迈阿密色主题学科 HTML5静态导航源码

源码介绍 迈阿密色主题学科 HTML5静态导航源码,源码直接上传可用,有技术的可以拿去写个后端搜索调用百度接口,也可用于做引导页下面加你网址添加一个A标签就行了,很简单,需要的朋友就拿去吧 界面预览 源码下载 迈阿…

nginx限制特定国家或地区的访问

一、查看 1. 先查看本地nginx是否有ngx_http_geoip2模块(如果有的同学有该模块可以直接跳到下面直接配置nginx服务) nginx -V 二、安装 1. 安装所需依赖 yum install -y libmaxminddb-devel pcre-devel zlib-devel gcc gcc-c make git 2. 下载ngx_h…

Docker 镜像导出和导入

docker 镜像导出 # 导出 docker 镜像到本地文件 docker save -o [输出文件名.tar] [镜像名称[:标签]] # 示例 docker save -o minio.tar minio/minio:latest-o 或 --output:指定导出文件的路径和名称[镜像名称[:标签]]:导出镜像名称以及可选的标签 dock…

Web2Code :网页理解和代码生成能力的评估框架

多模态大型语言模型(MLLMs)在过去几年中取得了爆炸性的增长。利用大型语言模型(LLMs)中丰富的常识知识,MLLMs在处理和推理各种模态(如图像、视频和音频)方面表现出色,涵盖了识别、推…

修改element-ui日期下拉框datetimePicker的背景色样式

如图: 1、修改背景色 .el-date-picker.has-sidebar.has-time { background: #04308D; color: #fff; border: 1px solid #326AFF } .el-date-picker__header-label { color: #ffffff; } .el-date-table th { color: #fff; } .el-icon-d-arrow-left:before { color: …