RedHat9 | podman容器

在这里插入图片描述

1、容器技术介绍

传统问题

  • 应用程序和依赖需要一起安装在物理主机或虚拟机上的操作系统
  • 应用程序版本比当前操作系统安装的版本更低或更新
  • 两个应用程序可能需要某一软件的不同版本,彼此版本之间不兼容

解决方式

  • 将应用程序打包并部署为容器
  • 容器是与系统的其他部分隔离的一个或多个进程的集合
  • 容器内容和其他容器内容是隔离的,不会相互影响
  • 容器是打包应用程序以简化和管理的方式

2、容器和虚拟化的对比

虚拟化

  • 可以在单一硬件设备上运行多个操作系统
  • 通过虚拟化软件将硬件拆分成多个虚拟硬件,允许多个操作系统同时运行
  • 需要完整的操作系统来支持应用允许

容器

  • 容器可以在操作系统上直接运行,容器之间共享硬件和操作系统资源
  • 容器中应用现对于虚拟化环境更轻量,运行速度更快速
  • 容器共享操作系统的内核,将容器化的应用程序进程与系统的其余部分隔离开,可以使用与该内核兼容的任何软件
  • 现对于虚拟化使用的硬件资源更少,可以快速启动和关闭,减少存储要求
  • 可以保存容器的多个版本,根据需求快速访问特定版本
  • 容器是临时的,可以将容器运行时产生的数据永久保存在持久存储中
    在这里插入图片描述

3、Rootless和Rootful容器

在容器主机上,可以使用root用户或普通用户运行容器。其中由特权用户运行的容器称为Rootful容器,普通用户运行的容器称为Rootless容器。Rootless容器不允许使用给特权用户所保留的系统资源(访问受限目录、在受端口(1024以下)发布网络服务)。

容器管理工具与开放容器协议(OCI)兼容,意味着我们可以管理所有兼容OCI协议的Linux容器,如Docker

容器管理工具

  • podman:直接管理容器和容器镜像
  • skopep:检查、复制、删除和签名镜像
  • buildah:创建新的容器镜像

4、容器镜像和注册表

运行容器必须使用容器镜像。容器镜像是包含编码步骤的静态文件,充当创建容器的蓝图。容器镜像会打包应用及其所有的依赖项,如系统库、编程语言运行时和库,以及其他配置设置。

镜像容器根据规范构建,遵循开放容器项目OCI镜像格式规范。这些规范定义容器镜像的格式,以及镜像支持的容器主机操作系统和硬件架构的元数据。

容器注册表是用于存储和检索容器镜像的存储库,通过将容器镜像推送或上传到容器注册表中,可以通过注册表中将这些容器镜像拉取或下载到本地系统,用于运行容器。有点类似于dnf。

可以使用第三方镜像的公共注册表,也可以使用私有注册表。需要注意容器镜像的来源,和dnf中的软件包一样,需要清楚容器镜像中的代码是否合规、安全。红帽通过两个主容器注册表来分发认证容器镜像,可以通过RedHat登录凭据来访问这个两个注册表。

红帽官方提供的注册表

  • registry.redhat.io:适用于基于RedHat官方产品的容器
  • registry.connect.redhat.com:适用于基础第三方产品的容器
  • https://access.redhat.com/containers:基于Web的界面

5、红帽Quay镜像仓库

访问红帽中国官网

https://www.redhat.com/zh

在菜单栏中找到【产品】,随后单击【查看所有产品】
在这里插入图片描述

点击左侧【产品A-Z】,然后选择【Quay】
在这里插入图片描述

红帽Quay需要收费
在这里插入图片描述

在红帽提供的学员练习环境中,有一个utility虚拟机,内置Quay,提供了部分的容器镜像。

https://utility/

在这里插入图片描述

账号密码

账号密码
adminredhat321

只提供了几个容器镜像
在这里插入图片描述

6、容器安装与登陆

安装podman容器(建议使用普通用户身份)

sudo dnf -y install container-tools

登陆podman

建议使用交互式登陆,避免遗留密码

# 登陆方式1:交互式
podman login registry.lab.example.com
> admin					# 输入账号
> redhat321				# 输入密码# 登陆方式1:非交互式
podman login registry.lab.example.com -u admin -p redhat321

在这里插入图片描述

查看登陆

podman login --get-login

在这里插入图片描述

登出podman

podman logout registry.lab.example.com

在这里插入图片描述

搜索镜像仓库

podman serach registry.lab.example.com/			# 地址末尾需要加上/,代表访问仓库根目录

在这里插入图片描述

7、规模化容器管理

新应用越来越多的使用容器来实现功能组件,越来越多的容器难于管理。

在实际环境中部署容器需要一个强大的环境

  • 平台必须确保必须服务容器的可靠性
  • 通过增加或减少运行中的容器实例,对流量进行负载均衡,应对应用使用高峰
  • 检测容器或主机的故障,并快速作出反应

Kubernetes(K8s,为什么叫K8s,是因为开头字母为K,结尾字母为s,中间8个字符)是一项编排服务,可以在容器集群中部署、管理和扩展基于容器的应用。通过负载均衡器将流量重定向到容器,以便扩展提供容器的数量。同时支持用户定义的健康性检查,以便监控容器,并在容器出现错误时将其自动重启。

RedHat提供了一个名为OpenShift的Kubernets发行版,是基于Kubernetes基础架构构建的一组模块化组件和服务。提供额外功能包括基于Web的远程管理、多租户、监控和审计、高级安全功能、应用生命周期管理和自助服务实例等。

8、部署容器

podman来自于container-tools元数据包的全功能容器引擎,用于管理开放容器计划(OCI)容器和镜像。podman的运行不使用守护进程,不需要使用root用户来启动或停止容器。

podman常用命令

参数作用
podman login登录
podman logout登出
podman search搜索镜像仓库内文件
podman login --get-login查看登录
–tls-verify不使用https验证
podman images查看当前系统中存在的镜像
podman ps查看系统中存在的容器
podman --version查看容器版本
podman build使用容器文件构建容器镜像
podman run在新容器中运行命令
podman images列出本地存储中的镜像
podman ps打印出有关容器的信息
podman inspect显示容器、镜像、卷、网络或容器基的配置
podman pull从注册表下载镜像
podman cp在容器和主机之间复制
podman exec在运行中的容器内执行命令
podman rm删除一个或多个容器
podman rmi删除1个或多个本地存储镜像

使用registries.conf文件中指定的注册表列表搜索匹配的名称镜像

podman search registry.lab.example.com/

在这里插入图片描述

拉取/下载指定镜像

podman pull registry.lab.example.com/ubi8/python-38

在这里插入图片描述

查看本地镜像

podman images
podman image ls

在这里插入图片描述

9、使用容器文件构建容器镜像

容器文件是一种文本文件,包含用于构建容器镜像的指令。容器文件通常具有定义其文件和目录所在路径的URL上下文。生成的容器镜像由只读层组成,每一层代表容器文件中的一条指令。

podman build构建容器镜像

podman build -t NAME:TAG DIR
  • podman build:构建容器镜像
  • -t NAME:指定生成镜像的名称
  • TAG:新镜像的标签,默认值为latest
  • DIR:工作目录路径

容器文件必须位于工作目录中,如果工作目录是当前目录,可以使用.来指定。可以通过-f指定与当前目录不同的目录。

Containerfile文件是构建镜像的命令参数脚本文件,构建容器镜像的步骤

  • 编写一个Containerfile文件
  • 使用podman build命令构建镜像

编写Containerfile文件,用于构建一个RedHat9并配置了YUM源,同时安装了Python3的镜像

vim Containerfile# 写入下列内容
FROM registry.lab.example.com/ubi9-beta/ubi:latest
RUN echo -e '[BaseOS]\nname=BaseOS\nbaseurl=http://content.example.com/rhel9.0/x86_64/dvd/BaseOS\nenable=1\ngpgcheck=0\n[AppStream]\nname=AppStream\nbaseurl=http://content.example.com/rhel9.0/x86_64/dvd/AppStream\nenable=1\ngpgcheck=0' > /etc/yum.repos.d/dvd.repo
RUN dnf install python3 -y
CMD ["/bin/bash","-c","sleep infinity"]
  • FROM:代表所使用的镜像
  • RUN:在构建镜像时执行的命令,该命令会依次执行(这里是创建一个YUM仓库文件)
  • CMD:构建完镜像后指定的命令,注意CMD指令的语法是使用JSON数组格式(如果使用数组,则值需要使用双引号)
  • sleep infinity:让容器在启动后保持运行状态

在这里插入图片描述

简单查看一下RUN命令的执行效果

echo -e '[BaseOS]\nname=BaseOS\nbaseurl=http://content.example.com/rhel9.0/x86_64/dvd/BaseOS\nenable=1\ngpgcheck=0\n[AppStream]\nname=AppStream\nbaseurl=http://content.example.com/rhel9.0/x86_64/dvd/AppStream\nenable=1\ngpgcheck=0'

在这里插入图片描述

需要先确保已经登陆podman

podman login --get-login

在这里插入图片描述

开始构建容器

podman build -t python3:1.0 .
  • podman build:构建容器镜像
  • -t python3:1.0:-t指定容器镜像的名称(镜像名称不允许大写),1.0为镜像标签(这里用1.0代表版本号)
  • .:指定Containerfile文件的路径,.代表在当前路径下
    在这里插入图片描述

验证本地镜像存储库,可以看到我们刚刚创建的镜像

podman images

在这里插入图片描述

查看镜像的相关信息

podman inspect localhost/python3:1.0			# 用于搜寻本地镜像的信息
skopeo inspect docker://xxxx					# 在网上搜寻镜像信息

在这里插入图片描述

移除本地镜像

podman rmi registry.lab.example.com/ubi8/python-38

在这里插入图片描述

10、创建、运行、删除容器

容器的状态

状态说明
Created已创建好但未启动的容器
Runing与其进程一起运行的容器
Stop其进程停止的容器
Paused其进程已停止的容器,不支持Rootless容器
Deleted其进程已被杀死的容器

列出系统上正在运行的容器

podman ps		# 查看当前正在运行的容器
podman ps -a	# 查看计算机上的所有容器(已创建、停止、状态或在运行的)

创建容器

podman create --name python3-1 localhost/python3:1.0
  • podman create:创建容器
  • –name python3-1:指定容器的名称(容器名称需保持唯一)
  • localhost/python3:1.0:创建容器所使用的容器镜像
  • d4b569c51c440cd091cff994c649734ef6651e22212413e5bed0d900505150c2:返回容器的长ID值

在这里插入图片描述

podman create --name python3-2 7c85859a8381		# 可以使用容器镜像的IMAGE ID

在这里插入图片描述

运行容器

podman start python3-1			# 可以使用名称(可以自动补全)
podman start d4b569c51c44		# 也可以使用CONTAINER ID

在这里插入图片描述

删除容器

podman rm -f d4b569c51c44 		# 删除指定容器
podman rm -rf python3-1			# 删除指定容器
podman rm -f -a 				# 删除所有容器

在这里插入图片描述

创建容器并在后台运行容器

podman run -d --name python3-1 localhost/python3:1.0 sleep infinity
podman run -di --name python3-1 localhost/python3:1.0		# 等同于上面
  • podman run:创建容器并运行容器
  • -d:在后台运行容器,容器的输出不会直接显示在终端上
  • –name python3-1:指定容器的名称
  • localhost/python3:1.0:使用的容器镜像
  • sleep infinity:容器启动后执行的命令:保持容器运行
    在这里插入图片描述

11、创建容器并与容器进行交互

创建一个RedHat7容器,并在终端与容器交互,在退出交互窗口后,容器状态会更改为退出

podman search registry.lab.example.com/					# 搜寻镜像
podman pull registry.lab.example.com/ubi7/ubi			# 拉取镜像
podman images											# 查看本地存储库中的镜像
podman run -ti --name redhat7 registry.lab.example.com/ubi7/ubi:latest		# 保持容器的运行状态,并在终端交互
  • podman run:创建容器并运行容器
  • -t:分配一个伪终端,用于与容器交互
  • -i:等同于sleep infinity,让容器保持运行
  • –name python3-2:指定容器的名称
  • localhost/python3:1.0:使用的容器镜像
    在这里插入图片描述

新开一个终端然后查看运行状态

ssh student@servera
podman ps

在这里插入图片描述

退出与容器的交互

exit

在这里插入图片描述

然后继续查看容器的状态,可以看到容器状态变为退出

podman ps 

在这里插入图片描述

12、创建容器并让容器持续运行

继续使用刚刚拉取的redhat7镜像创建容器

podman run -di --name redhat7-2 registry.lab.example.com/ubi7/ubi:latest
  • -d:在后台运行
  • -i:持续运行

查看容器的状态

podman ps -a

在这里插入图片描述

与容器进行交互,其实就是让容器执行/bin/bash命令,而/bin/bash会启动一个新的Bash shell会话

podman exec -ti redhat7-2 /bin/bash

在这里插入图片描述

退出会话,然后查看容器的状态

exit
podman ps -a

在这里插入图片描述

封装要在容器中执行的命令,可以避免特殊字符被转义

podman exec redhat7-2 sh -c 'echo HELLO > hello.txt;cat hello.txt'
  • sh -c ‘xxx’:封装要在容器中执行的命令

在这里插入图片描述

13、容器中的环境隔离

容器隔离应用环境,每一个容器都有自己的文件系统、网络和进程。

在运行状态的容器中执行命令,可以看到我们容器的版本是Redhat7,而运行容器的系统版本是Redhat9,由此可以看出容器会隔离应用环境。

podman exec redhat7-2 cat /etc/redhat-release

在这里插入图片描述

14、容器中的文件系统隔离

首先在主机上创建一个脚本文件

echo "echo Hello!" > demo.sh

将脚本文件复制到容器中

podman cp demo.sh redhat7-2:/

运行容器中的脚本

podman exec redhat7-2 sh -c "chmod o+x demo.sh;./demo.sh"

在这里插入图片描述

15、删除容器和镜像

在删除容器镜像之前,必须先从该镜像移除任何现有运行的中的容器。

查看当前存在的容器

podman ps -a

在这里插入图片描述

当前存在容器,尝试删除镜像

podman rmi localhost/python3:1.0

在这里插入图片描述

先删除容器

podman rm -f python3-1
podman rm -f python3-2

在这里插入图片描述

再删除镜像

podman rmi localhost/python3

在这里插入图片描述

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

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

相关文章

鸿蒙北向开发 ubuntu20.04 gn + ninja环境傻瓜式搭建闭坑指南

ninja跟gn都是比较时髦的东西,由歪果仁维护,如果走下载源码并编译这种流程的话需要走github跟google官网下载,国内的用网环境相信各位傻瓜都知道,github跟google这几年基本是属于连不上的状态,好在你看的鸿蒙项目跟国内的一些软件大厂已经帮你爬过梯子了,ninja工具跟gn工具已经…

一文弄懂梯度下降算法

1、引言 在上一篇文章中,我们介绍了如何使用线性回归和成本损失函数为房价数据找到最拟合的线。不过,我们也看到,测试多个截距值可能既繁琐又低效。在本文中,我们将深入探讨梯度下降算法,这是一种更加强大的技术&…

go~缓存设计配合singleFlight

一个缓存设计,配合go的singleFlight 最开始的设计如下 添加分布式缓存 上线后分布式缓存上涨的流量并不等于下游下降的流量,而是下游下降的流量 * 2~3 究其原因,就是采用了go的singleFlight,假定请求缓存时长10ms&a…

学校消防巡检二维码卡如何使用

为了加强和规范学校消防安全管理,预防和减少火灾危害,保障公共财产和教师、职工、学生的生命安全;传统的学校消防巡检都是纸质巡检记录会存在浪费纸张、信息滞后、容易造假、容易丢失、信息更新不及时。 通过凡尔码平台生成学校消防二维码巡…

揭秘:国产化系统加密

随着信息化时代的到来,数据安全已成为国家、企业和个人共同关注的焦点。政府系统国产化作为提高信息安全和自主可控能力的重要举措,正逐步得到广泛实施。在这一过程中,沙箱技术作为一种先进的安全机制,其在国产化系统加密效果方面…

系统设计中的垂直扩展和水平扩展,该如何选择?

在系统设计时,我们需要预估系统的容量,但是,随着系统流量的增大,我们会通过扩容来应对流量,常见的扩容方式是垂直扩展和水平扩展,因此,这本文章,我们将深入探讨这两种扩展策略的优缺…

项目管理中常见的6种度量指标,你知道吗?

在项目管理中,为了有效地监控和控制项目的进展、成本、质量等方面,我们通常会采用一系列的度量指标。这些度量指标不仅可以帮助项目经理了解项目的当前状态,还能预测未来的趋势,从而作出相应的决策。以下是六种常见的项目度量数据…

AI产品活跃用户排名出炉!文心一言APP国内第一,Kimi疯狂掉队

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 6月28日,极光大数据旗下月狐数据发布2024年5月中国生成式AI行业市场热点月度分析报告,披露了国内移动端主流生成式AI应用…

BFS:队列+树的宽搜

一、二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 该题的层序遍历和以往不同的是需要一层一层去遍历&#xff0c;每一次while循环都要知道在队列中节点的个数&#xff0c;然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…

AUTOSAR以太网之IPv4

系列文章目录 返回总目录 文章目录 系列文章目录一、IPv4报文格式二、主要函数1.IPv4_Init()2.IPv4_Receive()3.IPv4_Transmit() 一、IPv4报文格式 二、主要函数 1.IPv4_Init() 这个函数除了对模块配置进行初始化&#xff0c;如果有分包和组包使能&#xff0c;则会对一些相关…

桌面提醒工具哪个好?简单好用的便签提醒app推荐

在日常的生活和工作中&#xff0c;我们经常会遇到各种各样的事情&#xff0c;有时候可能会遗忘一些重要的事情。这个时候&#xff0c;一个简单好用的便签提醒工具就显得尤为重要了。那么&#xff0c;哪款桌面提醒工具比较好用呢&#xff1f;下面&#xff0c;就为大家推荐一款我…

ONNX模型利用CUDA加速如何正确配置好环境?

目前onnx可选的执行引擎非常多&#xff0c;覆盖了从cpu、gpu到npu&#xff0c;从Intel平台到AMD平台等。如下是onnxruntime所有的执行引擎。 [TensorrtExecutionProvider, CUDAExecutionProvider, MIGraphXExecutionProvider, ROCMExecutionProvider, OpenVINOExecutionProvide…

基于公有云部署wordpress

云平台选择 腾讯云 阿里云 华为云 项目部署 一、架构讲解 1.1、定义与组成 LNMP是Linux、Nginx、MySQL&#xff08;或MariaDB&#xff09;和PHP&#xff08;或Perl、Python&#xff09;的首字母缩写&#xff0c;代表在Linux系统下使用Nginx作为Web服务器&#xff0c;MySQL作为…

Mongodb安装与配置

Mongodb的下载 这里下载的是MongoDB 7.0.11版本的 首先进入官网&#xff1a;https://www.mongodb.com/ 点击完上面两步后&#xff0c;加载来到该页面&#xff0c;选择自己的版本、系统&#xff0c;是压缩包(zip)还是安装包(msi)。 下载好之后能&#xff0c;来到安装包哪里&a…

互联网直播/点播技术与平台创新应用:视频推拉流EasyDSS案例分析

随着互联网技术的快速发展&#xff0c;直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域&#xff0c;互联网直播/点播平台与技术的应用&#xff0c;不仅为用户带来了全新的购物体验&#xff0c;也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…

wavesummit2024发布飞桨3.0版本

今天网上看了wavesummit2024深度学习开发者大会,本来没有啥期待&#xff0c;结果发现飞桨竟然发布3.0版本了&#xff01; 以下是飞桨框架 3.x 的新特性&#xff1a; 动静统一自动并行&#xff1a; 为了降低大模型的编程难度&#xff0c;飞桨还优化了动静统一的半自动并行编程范…

陪诊小程序开发:寻找陪诊师更加快速,全程陪护!

陪诊行业是一个新兴行业&#xff0c;在当下市场中具有较大的发展前景。对于无法陪家人看病或者对医院不熟悉的人来说&#xff0c;陪诊师成为了刚需&#xff01;目前随着社会的发展&#xff0c;人们的生活节奏不断加快&#xff0c;陪诊市场的需求量也在不断增加&#xff0c;发展…

荣耀终端发布首个端侧AI反诈检测技术,助力用户防范网络诈骗

在今日盛大开幕的2024年上海世界移动通信大会上&#xff0c;荣耀终端以卓越的创新实力引领行业潮流&#xff0c;率先发布了手机行业中首个端侧AI反诈检测技术。该技术旨在为用户提供更加安全、可靠的网络通信体验&#xff0c;助力防范日益猖獗的网络诈骗行为。 AI-321 | 专注全…

技巧类题目

目录 技巧类题目 136 只出现一次的数字 191 位1的个数 231. 2 的幂 169 多数元素 75 颜色分类 &#xff08;双指针&#xff09; 287. 寻找重复数 136 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均…

【Redis四】主从复制、哨兵以及Cluster集群

目录 一.主从复制、哨兵、集群的区别 二.Redis主从复制 1.作用 2.原理 3.流程 三.搭建Redis 主从复制 1.源码编译安装以及配置文件修改 1.1.修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.验证主从复制 2.1.在Master节点上看日志 2.2.在Master节点上…