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

在这里插入图片描述

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

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

相关文章

MySQL实训项目——学生成绩录入与分析系统

项目简述:在校园中,除了上课之外,我们会有许多大大小小的考试,本项目将实现对学生数据的增添,删除,查询与修改,能让教育者更好的了解学生情况,进而优化教学方法和管理策略。 1.建表…

揭秘系统架构:从零开始,探索技术世界的无限可能

文章目录 引言一、系统架构的基本概念二、系统架构的设计原则模块化可扩展性高可用性安全性 三、常见的系统架构模式1. **分层架构(Layered Architecture)**:2. **微服务架构(Microservices Architecture)**&#xff1…

【嵌入式DIY实例】-LCD ST7735显示LM35传感器数据

LCD ST7735显示LM35传感器数据 文章目录 LCD ST7735显示LM35传感器数据1、硬件准备与接线2、代码实现本文将介绍如何使用 LM35 模拟温度传感器构建一个简单的温度计,其中温度值打印在 ST7735 TFT 显示屏上(以摄氏度、开尔文度和华氏度为单位)。 ST7735 TFT是一款分辨率为128…

从一万英尺外看libevent(源码刨析)

从一万英尺外看libevent 温馨提示:阅读时间大概二十分钟 前言 Libevent是用于编写高速可移植非阻塞IO应用的库,其设计目标是: 可移植性:使用libevent编写的程序应该可以在libevent支持的所有平台上工作。即使没有好的方式进行非…

使用minio搭建oss

文章目录 1.minio安装1.拉取镜像2.启动容器3.开启端口1.9090端口2.9000端口 4.访问1.网址http://:9090/ 5.创建一个桶 2.minio文件服务基本环境搭建1.创建一个文件模块2.目录结构3.配置依赖3.application.yml 配置4.编写配置类MinioConfig.java,构建minioClient5.Fi…

用Python将PowerPoint演示文稿转换到图片和SVG

PowerPoint演示文稿作为展示创意、分享知识和表达观点的重要工具,被广泛应用于教育、商务汇报及个人项目展示等领域。然而,面对不同的分享场景与接收者需求,有时需要我们将PPT内容以图片形式保存与传播。这样能够避免软件兼容性的限制&#x…

【网络架构】keepalive

目录 一、keepalive基础 1.1 作用 1.2 原理 1.3 功能 二、keepalive安装 2.1 yum安装 2.2 编译安装 三、配置文件 3.1 keepalived相关文件 3.2 主配置的组成 3.2.1 全局配置 3.2.2 配置虚拟路由器 四、实际操作 4.1 lvskeepalived高可用群集 4.2 keepalivedngi…

iOS政策解读之三丨商务、设计和法律 “三重奏“

上一篇的iOS政策解读文章,我们从安全和性能两方面进行了学习和解读,这两个方面是最为重要,也是优先级最高的方面。 如果您还没来得及阅读,欢迎移步我们前两篇的解读文章: iOS政策解读之一丨App提交审核前注意事项必知…

建投数据人力资源管理系统APP完成迭代升级

近日,建投数据人力资源管理系统APP完成迭代升级。 此次升级思路,遵循提升移动应用的功能和用户体验;直观的界面、快速的响应速度和安全的数据存储;个性化的功能,以满足不同员工的需求和使用偏好。 人力资源管理系统A…

ozon定价计算器下载,ozon定价计算器

各位电商卖家们,大家好!在这个竞争激烈的电商时代,你是否还在为产品定价而头疼不已?特别是在俄罗斯ozon电商平台,本土与跨境的定价策略更是需要精细把控。今天,就为大家带来一款强大的定价工具——萌啦ozon…

QT QThread 线程类的使用及示例

QThread 是 Qt 框架提供的一个用于处理多线程的类,它允许开发者编写具有并发功能的应用程序,提高程序的响应速度、执行效率和用户体验。 在操作系统中,线程是进程内的执行单元,拥有独立的执行路径。每个线程有自己独立的栈空间&a…

数据库同步最简单的方法

数据库同步到底有咩有简单的方法,有肯定是有的,就看你有咩有缘,看到这篇文章,你就是有缘人。众所周知,数据库同步向来都不是一件简单的事情,它很繁琐,很费精力,很考验经验&#xff0…

unity 导入的模型设置讲解

咱们先讲Model这一栏 Model Scene:场景级属性,例如是否导入灯光和照相机,以及使用什么比例因子。 Scale Factor:缩放因子(也就是模型导入后大小如果小了或者大了在这里直接改是相当于该模型的大小的,而且在…

Windows系统开启python虚拟环境

.\env4socre\Scripts\activate : 无法加载文件 E:\SocreMan\env4socre\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。 环境:windows 11、vscode 1、用管理员权限打开powershell 输入set-executionpolicy remotesigned,选择Y 2、返回v…

网工内推 | 网络工程师,IE认证优先,最高18k*14薪,周末双休

01 上海吾索信息科技有限公司 🔷招聘岗位:网络工程师 🔷岗位职责: 1)具备网络系统运维服务经验以及数据库实施经验,具备网络系统认证相关资质或证书; 2)掌握常用各设备的运维巡检…

Logback-打印方法名及代码行号

背景 公司产品使用了logback作为日志输出框架,日志输出的pattern里配置了打印调用方法名及代码行号的配置,但是实际输出的日志方法名总是显示? 在强迫症的驱使下,开启了探秘之旅 Logback版本 1.2.3 项目中Logging.pattern配置如下&#xff1…

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11(下):YOLO的入门使用一节中,我们已经了解YOLO的使用方法,使用过程非常简单,训练时只需要三行代码:引入YOLO,构建模型,训练模型;预测…

DevOps CMDB平台整合Jira工单

背景 在DevOps CMDB平台建设的过程中,我们可以很容易的将业务应用所涉及的云资源(WAF、K8S、虚拟机等)、CICD工具链(Jenkins、ArgoCD)、监控、日志等一次性的维护到CMDB平台,但随着时间的推移,…

《昇思25天学习打卡营第5天|onereal》

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作:Pointw…

【51单片机入门】点亮数码管

文章目录 前言仿真图如何去绘制一个数字示例代码选择某个数码管显示某个数字 示例代码总结 前言 在嵌入式系统的世界中,单片机扮演着至关重要的角色。51单片机,作为最早的微控制器之一,至今仍被广泛应用在各种设备中。本文将介绍如何使用51单…