Podman 深度解析

目录

  1. 引言
  2. Podman 的定义
  3. Podman 的架构
  4. Podman 的工作原理
  5. Podman 的应用场景
  6. Podman 在 CentOS 上的常见命令
  7. 实验场景模拟
  8. 总结

1. 引言

      随着容器化技术的发展,Docker 已成为容器管理的代名词。然而,由于 Docker 的一些局限性,如需要守护进程和 root 权限,越来越多的开发者和运维工程师开始寻找替代方案。Podman 是一个无守护进程、无根运行的容器引擎,它不仅兼容 Docker 的命令行工具,还提供了一些独特的优势。本文将详细介绍 Podman 的定义、架构、工作原理、应用场景、常见命令以及实验操作,帮助读者全面掌握这一强大的容器工具。

2. Podman 的定义

      Podman 是一个开源的容器引擎,由 Red Hat 开发,主要用于创建、运行和管理符合 OCI 标准的容器和 Pod。与 Docker 不同,Podman 无需守护进程运行,可以以无根(rootless)方式执行容器,显著提高了系统的安全性。Podman 的命令行工具与 Docker 兼容,使得用户可以轻松迁移现有的 Docker 工作流到 Podman。

3. Podman 的架构

      Podman 的架构设计注重模块化和安全性,其主要组件包括:

  • Podman CLI:提供与 Docker 兼容的命令行工具,用户通过它与 Podman 交互。
  • libpod:Podman 的核心库,负责容器和 Pod 的创建和管理。
  • conmon:容器监控工具,负责监控容器的生命周期和日志管理。
  • runc 和 crun:OCI 容器运行时,用于启动和运行容器。
  • CNI(Container Network Interface):管理容器网络配置,确保容器间的网络连通性。
  • skopeo 和 buildah:分别用于容器镜像的传输和构建,增强了 Podman 的功能。

4. Podman 的工作原理

      Podman 的工作流程可以简要分为以下几个步骤:

  1. 镜像管理:通过 skopeo 从远程仓库拉取镜像,或使用 buildah 构建本地镜像。
  2. 容器创建:通过 Podman CLI 和 libpod 库创建容器,指定镜像和运行参数。
  3. 网络配置:使用 CNI 插件配置容器网络,分配 IP 地址和路由信息。
  4. 容器运行:通过 runc 或 crun 启动容器,运行指定的应用程序。
  5. 生命周期管理:使用 conmon 监控容器的运行状态,处理容器的启动、停止和重启操作。

      Podman 的无根模式使得容器运行不再需要 root 权限,降低了潜在的安全风险。此外,Podman 支持 Pod 概念,可以在单个 Pod 中运行多个容器,方便微服务架构的部署和管理。

5. Podman 的应用场景

      Podman 的无守护进程和无根运行特性使其在许多场景中得到了广泛应用,主要包括:

  1. 开发环境:开发人员可以在本地轻松创建和管理容器,无需依赖守护进程,提高开发效率。
  2. 持续集成/持续交付(CI/CD):在 CI/CD 管道中使用 Podman 运行构建和测试任务,提高安全性和稳定性。
  3. 生产环境:在生产环境中使用 Podman 运行容器化应用,减少系统攻击面,提升安全性。
  4. 多租户环境:在多租户环境中使用无根容器运行应用,确保不同租户之间的隔离和安全。
  5. 轻量级虚拟化:利用 Podman 实现轻量级的虚拟化环境,减少资源开销,提高系统性能。

6. Podman 在 CentOS 上的常见命令

      在 CentOS 上使用 Podman,可以通过以下步骤进行安装、配置和使用:

6.1 安装 Podman

首先,更新系统并安装 Podman

sudo yum update -y

sudo yum install -y podman

6.2 启动和管理容器

      使用 Podman 启动、停止和管理容器的基本命令如下:

# 启动一个新的容器

podman run -d --name mycontainer -p 8080:80 nginx

# 查看运行中的容器

podman ps

# 停止容器

podman stop mycontaine

# 启动已停止的容器

podman start mycontainer

# 删除容器

podman rm mycontainer

# 查看容器日志

podman logs mycontainer

6.3 镜像管理

管理容器镜像的命令如下:

# 拉取镜像

podman pull nginx

# 列出本地镜像

podman images

# 删除镜像

podman rmi nginx

6.4 无根模式

      Podman 支持无根模式,用户无需 root 权限即可运行容器:

# 切换到普通用户

su - username

# 运行容器

podman run -d --name mycontainer -p 8080:80 nginx

6.5 网络管理

配置和管理容器网络的命令如下:

# 创建自定义网络

podman network create mynetwork

# 在自定义网络中运行容器

podman run -d --name mycontainer --network mynetwork nginx

# 查看网络配置

podman network inspect mynetwork

# 删除网络

podman network rm mynetwork

7. 实验场景模拟

      在本节中,我们将通过一个实际的实验场景来演示如何在 CentOS 上使用 Podman 进行容器管理。

实验环境

  • 一台 CentOS 主机:ServerA
  • ServerA 的 IP 地址:192.168.1.100

步骤一:安装 Podman

首先,在 ServerA 上安装 Podman:

sudo yum update -y

sudo yum install -y podman

步骤二:运行一个 Nginx 容器

使用 Podman 启动一个 Nginx 容器,并将其端口映射到主机的 8080 端口:

podman run -d --name nginx -p 8080:80 nginx

步骤三:访问 Nginx 服务

在浏览器中输入 http://192.168.1.100:8080,验证是否能够正常访问 Nginx 服务。如果看到 Nginx 的欢迎页面,说明容器运行正常。

步骤四:查看容器日志

查看 Nginx 容器的运行日志:

podman logs nginx

步骤五:停止和删除容器

停止并删除 Nginx 容器:

podman stop nginx

podman rm nginx

步骤六:创建自定义网络

创建一个名为 mynetwork 的自定义网络,并在该网络中运行一个新的 Nginx 容器:

podman network create mynetwork

podman run -d --name nginx --network mynetwork -p 8080:80 nginx

步骤七:查看网络配置

查看 mynetwork 网络的详细配置:

podman network inspect mynetwork

步骤八:使用 Volume 持久化数据

使用 Podman 的 Volume 功能来持久化容器数据,创建一个名为 myvolume 的卷,并将其挂载到 Nginx 容器的 /usr/share/nginx/html 目录:

# 创建卷

podman volume create myvolume

# 运行容器并挂载卷

podman run -d --name nginx -p 8080:80 -v myvolume:/usr/share/nginx/html nginx

将一些测试数据写入卷中,并重启容器,验证数据的持久化:

# 写入测试数据

echo "Hello, Podman!" > /var/lib/containers/storage/volumes/myvolume/_data/index.html

# 重启容器

podman restart nginx

# 在浏览器中访问 http://192.168.1.100:8080,查看测试数据

8. 总结

      Podman 作为一款无守护进程、无根运行的容器管理工具,提供了丰富的功能和灵活的配置,适用于各种容器化应用场景。本文详细介绍了 Podman 的定义、架构、工作原理、应用场景、常见命令以及实验操作,帮助读者更好的理解Podma

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

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

相关文章

基于java+springboot+vue实现的大学生就业需求分析系统(文末源码+Lw)233

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自…

jmeter-beanshell学习3-beanshell获取请求报文和响应报文

前后两个报文,后面报文要用前面报文的响应结果,这个简单,正则表达式或者json提取器,都能实现。但是如果后面报文要用前面请求报文的内容,感觉有点难。最早时候把随机数写在自定义变量,前后两个接口都用这个…

HTML5使用<progress>进度条、<meter>刻度条

1、<progress>进度条 定义进度信息使用的是 progress 标签。它表示一个任务的完成进度&#xff0c;这个进度可以是不确定的&#xff0c;只是表示进度正在进行&#xff0c;但是不清楚还有多少工作量没有完成&#xff0c;也可以用0到某个最大数字&#xff08;如&#xff1…

如何搜索查找ICLR论文

记录有几个查找顶级会议文章的网址&#xff0c;不止ICLR ICLR 2024 还会有visualization模式&#xff1a; ICLR 2024 virtual 这个网站也很棒 Paper Copilot ICLR 2024 当然还有一个用图表示各论文相关关系的网站&#xff1a; connected papers

ROS——坐标系管理、监听与广播、常用可视化工具

坐标系管理 TF功能包 小海龟追踪实验 ros版本(20.04)的tf安装命令: sudo apt-get install ros-noetic-turtle-tf 解决因python版本出现的无法生成跟随海龟&#xff1a; sudo ln -s /usr/bin/python3 /usr/bin/python ( -s 软链接,符号链接) ln命令&#xff08;英文全拼&#…

Matplotlib Artist 1 概览

Matplotlib API中有三层 matplotlib.backend_bases.FigureCanvas&#xff1a;绘制区域matplotlib.backend_bases.Renderer&#xff1a;控制如何在FigureCanvas上绘制matplotlib.artist.Artist&#xff1a;控制render如何进行绘制 开发者95%的时间都是在使用Artist。Artist有两…

【MYSQL】InnoDB引擎为什么选可重复读作为默认隔离级别

InnoDB引擎为什么选可重复读作为默认隔离级别 一般的DBMS系统&#xff0c;默认都会使用读提交&#xff08;Read-Comitted&#xff0c;RC&#xff09;作为默认隔离级别&#xff0c;如Oracle、SQL Server等&#xff0c;而MySQL却使用可重复读&#xff08;Read-Repeatable&#x…

MySQL 9.0 创新版发布,大失所望。。

大家好&#xff0c;我是程序员鱼皮。2024 年 7 月 1 日&#xff0c;MySQL 发布了 9.0 创新版本。区别于我们大多数开发者常用的 LTS&#xff08;Long-Term Support&#xff09;长期支持版本&#xff0c;创新版本的发布会更频繁、会更快地推出新的特性和变更&#xff0c;可以理解…

白嫖A100活动-入门篇-1.Linux+InterStudio

进入InterStudio 这节课是为了让大家熟悉使用InterStudio平台&#xff0c;以便后续开发 InterStudio平台是算力平台&#xff0c;可以通过平台使用A100,还可以使用“书生”团队集成好的环境、工具&#xff0c;快速部署LLMs. 进入平台&#xff1a; 记得报名&#xff0c;获得免…

快排的非递归实现

前提 快排的递归实现&#xff0c;在深度过深时会存在栈溢出的风险&#xff0c;所以我们需要掌握快排的非递归写法 快排的实现 单趟实现 上次我们使用了hoare的快排单趟写法&#xff0c;所以这次我们使用前后指针法. 前后指针法 初始状态下&#xff0c;初始化prev为left,cu…

Android Studio Run窗口中文乱码解决办法

Android Studio Run窗口中文乱码解决办法 问题描述&#xff1a; AndroidStudio 编译项目时Run窗口中文乱码&#xff0c;如图&#xff1a; 解决方法&#xff1a; 依次打开菜单&#xff1a;Help--Edit Custom VM Options&#xff0c;打开studio64.exe.vmoptions编辑框&#xf…

CV03_mAP计算以及COCO评价标准

COCO数据集回顾&#xff1a;CV02_超强数据集&#xff1a;MSCOCO数据集的简单介绍-CSDN博客 1.1 简介 在目标检测领域中&#xff0c;mAP&#xff08;mean Average Precision&#xff0c;平均精度均值&#xff09;是一个广泛使用的性能评估指标&#xff0c;用于衡量目标检测模型…

【Unity2D 2022:Particle System】添加命中粒子特效

一、创建粒子特效游戏物体 二、修改粒子系统属性 1. 基础属性 &#xff08;1&#xff09;修改发射粒子持续时间&#xff08;Duration&#xff09;为1s &#xff08;2&#xff09;取消勾选循环&#xff08;Looping&#xff09; &#xff08;2&#xff09;修改粒子存在时间&…

数据库管理工具 -- Navicat Premium v17.0.8 特别版

软件简介 Navicat Premium 是一款功能强大的数据库管理工具&#xff0c;适用于Windows、Mac和Linux平台。它支持多种数据库&#xff0c;包括MySQL、MariaDB、SQL Server、PostgreSQL、Oracle、SQLite等。用户可以通过Navicat Premium轻松地连接到各种数据库服务器&#xff0c;…

mac怎么压缩pdf文件,mac压缩pdf文件大小不改变清晰度

在数字化时代&#xff0c;pdf文件因其良好的兼容性和稳定性&#xff0c;已经成为我们日常办公和学习中不可或缺的文件格式。然而&#xff0c;随着文件内容的增多&#xff0c;pdf文件的体积也往往会变得越来越大&#xff0c;给文件的传输和存储带来不便。本文将为你介绍几种简单…

视觉语言模型:融合视觉与语言的未来

1. 概述 视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;是能够同时处理和理解视觉&#xff08;图像&#xff09;和语言&#xff08;文本&#xff09;两种模态信息的人工智能模型。这种模型结合了计算机视觉和自然语言处理的技术&#xff0c;使得它们能够在…

第一天(点亮led灯+led灯闪烁)——Arduino uno R3 学习之旅

​ 常识: 一般智能手机的额定工作电流大约为200mA Arduino Uno板上I/0(输入/输出)引脚最大输出电流为40 mA Uno板控制器总的输出电流为200 mA 点亮LED灯 发光二极管介绍 发光二极管(Light Emitting Diode&#xff0c;简称LED)是一种能够将电能转化为光能的固态的半导体器件…

016-GeoGebra基础篇-加载项错误_使用此功能所需的服务已关闭,请检查你的隐私设置,

最近有伙伴说遇到一个问题&#xff1a;“加载项错误_使用此功能所需的服务已关闭&#xff0c;请检查你的隐私设置”&#xff0c;该怎么解决&#xff1f; 若大家也遇到同样的问题&#xff0c;建议按照我下边的步骤逐个排查下&#xff0c;基本可以解决“GeoGebra无法完美插入PPT…

计算机网络——数据链路层(以太网)

目录 局域网的数据链路层 局域网可按照网络拓扑分类 局域网与共享信道 以太网的两个主要标准 适配器与mac地址 适配器的组成与运作 MAC地址 MAC地址的详细介绍 局域网的mac地址格式 mac地址的发送顺序 单播、多播&#xff0c;广播mac地址 mac帧 如何取用…

破解宇宙终极奥秘,战胜昊天无上束缚

在幽邃的暗夜下&#xff0c;细品着夫子与昊天跨越千年的智勇交锋&#xff0c;我的思绪不禁飘向了更加深远的宇宙边际&#xff0c;回响起那些关于人类如何挑战天命、战胜上天的过往。 宇宙奥秘 在浩瀚无垠的宇宙深渊中&#xff0c;隐藏着一段超越凡尘的规则。昊天&#xff0c;…