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.rhkb.cn/news/363836.html

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

相关文章

[C#][opencvsharp]C#使用opencvsharp进行年龄和性别预测支持视频图片检测

使用 OpenCVSharp 来调用 age_net.caffemodel 和 gender_net.caffemodel 来进行性别和年龄预测涉及几个步骤。以下是一个简化的流程和示例文案: 1. 准备工作 确保你已经安装了 OpenCVSharp 和相关的依赖项。确保你有 age_net.prototxt、age_net.caffemodel、gende…

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针,从小到大找到合并B时应该A相应位置应该插入的元素,因为在插入的过程中B的元素会替换A原有位置的元素,所以需要先将A…

基于Vue,mysql,JavaEE的简单投票与投票管理系统

项目介绍 ​ 本项目,基于Vue2.6,mysql,JavaEE 实现简单的投票与投票管理系统 项目地址 VotingSystem: 投票系统1.0 管理员和普通用户 (gitee.com) 有问题请评论私聊哦 项目分类 数据库 创建投票人,被投票人,投票关系(追踪谁…

Qt源码分析:窗体绘制与响应

作为一套开源的UI代码库,窗体绘制与响应自然是最为基本的功能。在前面的博文中,已就Qt中的元对象系统(反射机制)、事件循环等基础内容进行了分析,并捎带阐述了窗体响应相关的内容。因此,本文着重分析Qt中窗体绘制相关的内容。 注…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-28批量规范化

28批量规范化 """可持续加速深层网络的收敛速度""" import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as pltdef batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):""&quo…

算法题 — 接雨水

给定 n 给非负整数,表示每个宽度为 1 的柱子的高度图,计算按照此排列的柱子,下雨之后能能接到多少雨水。 输入:height [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] 输出:6 解释:上面是由数组 [0, 1, 0, 2, 1,…

算法基础--------【图论】

图论(待完善) DFS:和回溯差不多 BFS:进while进行层序遍历 定义: 图论(Graph Theory)是研究图及其相关问题的数学理论。图由节点(顶点)和连接这些节点的边组成。图论的研究范围广泛,涉及路径、…

【日记】现在的孩子真是不怕大人呢(1975 字)

正文 时间太晚了,而且想写的内容有点多,就不写在日记本上了。 不过说内容多,其实也只有两件事情。其他的就一笔带过吧。一件关于灵,另一件事关于遇见的孩子。 首先说说工作,今天真的如昨天预料的那样,特别忙…

基于Pico和MicroPython点亮ws2812彩色灯带

基于Pico和MicroPython点亮ws2812彩色灯带 文章目录 基于Pico和MicroPython点亮ws2812彩色灯带IntroductionPracticeConclusion Introduction 点亮发光的LED灯是简单有趣的实验,点亮多个ws2812小灯串联起来的灯带,可对多个彩色小灯进行编程,…

软件测试之接口测试(Postman/Jmeter)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口,比如你需要从别的系统来…

cartographer从入门到精通(一):cartographer介绍

一、cartographer重要文档 有关cartographer的资料有2个比较重要的网站,我们的介绍也是基于这两个网站,其中会加入自己的一些理解,后续也有一些对代码的修改,来实现我们想完善的功能。 1-Cartographer 2-Cartographer ROS 第1个…

融资担保行业数字化转型探索与实践

融资担保行业数字化转型探索与实践 随着全球经济的快速发展和科技的不断进步,数字化转型已成为各行各业提升竞争力和实现可持续发展的必然选择。融资担保行业作为金融体系中的重要组成部分,也在积极探索和实践数字化转型,以更好地服务中小微企…

小时候的子弹击中了现在的我-hive进阶:案例解析(第18天)

系列文章目录 一、Hive表操作 二、数据导入和导出 三、分区表 四、官方文档(了解) 五、分桶表(熟悉) 六、复杂类型(熟悉) 七、Hive乱码解决(操作。可以不做,不影响) 八、…

图像大模型中的注意力和因果掩码

AIM — 图像领域中 LLM 的对应物。尽管 iGPT 已经存在 2 年多了,但自回归尚未得到充分探索。在本文中,作者表明,当使用 AIM 对网络进行预训练时,一组图像数据集上的下游任务的平均准确率会随着数据和参数的增加而线性增加。 要运…

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!!

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 实现…

Redis 7.x 系列【11】数据类型之位图(Bitmap)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 基本命令2.1 SETBIT2.2 GETBIT2.3 BITCOUNT2.4 BITPOS2.5 BITFIELD2.6 BITF…

OverTheWire Bandit 靶场通关解析(下)

介绍 OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台,旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡,每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题,用户可…

绝了!Stable Diffusion做AI治愈图片视频,用来做副业简直无敌!10分钟做一个爆款视频保姆教程

一 项目分析 这个治愈类视频的玩法是通过AI生成日常生活场景,制作的vlog,有这样的一个号,发布了几条作品,就涨粉了2000多,点赞7000多,非常的受欢迎。 下面给大家看下这种作品是什么样的,如图所…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target,找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案,且同样的元素不能被重复利用。比如:给定 nums [2, 7, 11, 15] 和 target 9,返回 [0, 1],因…

基于Java的蛋糕预定系统【附源码+LW】

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法,但这种管理方法存…