Podman 深度解析

news2024/11/19 6:39:47

目录

  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

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

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

相关文章

昇思25天学习打卡营第08天|模型训练

模型训练 模型训练一般分为四个步骤: 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后,可以进行模型的训练与评估。 ps:这里的训练和Stable Diffusion中的训练是一样…

BUUCTF - Basic

文章目录 1. Linux Labs 【SSH连接漏洞】2. BUU LFI COURSE【文件包含漏洞】3. BUU BRUTE【暴力破解用户名密码】4. BUU SQL COURSE【SQL注入-当前数据库】5. Upload-Labs-Linux 1【文件上传漏洞】7. Buu Upload Course 1【文件上传包含漏洞】8. sqli-labs 1【SQL注入-服务器上…

【论文笔记】BEVCar: Camera-Radar Fusion for BEV Map and Object Segmentation

原文链接:https://arxiv.org/abs/2403.11761 0. 概述 本文的BEVCar模型是基于环视图像和雷达融合的BEV目标检测和地图分割模型,如图所示。模型的图像分支利用可变形注意力,将图像特征提升到BEV空间中,其中雷达数据用于初始化查询…

Linux 进程间的信号

1.信号的初认识 信号是进程之间事件异步通知的一种方式,属于软中断。通俗来说信号就是让用户或进程给其他用户和进程发生异步信息的一种方式。对于信号我们可以根据实际生活,对他有以下几点认识:1.在没有产生信号时我们就知道产生信号要怎么处…

C++:特殊类的设计(无线程)

目录 一、设计一个不能拷贝类 二、设计一个只能在堆上创建对象的类 方法一:析构函数私有化 方法二:构造函数私有化 三、设计一个只能在栈上创建对象的类 四、设计一个类不能被继承 五、设计一个只能创建一个对象的类(单例模式&#xf…

加盖骑缝章软件、可以给PDF软件加盖自己的骑缝章

加盖骑缝章的软件多种多样,尤其是针对PDF文件,有多种软件可以实现给PDF文件加盖自己的骑缝章。以下是一些常用的软件及其特点: 1. Adobe Acrobat Pro DC 特点: 多功能PDF编辑:Adobe Acrobat Pro DC是一款功能强大的…

开发必备基础知识【Linux环境变量文件合集】

开发必备基础知识【Linux环境变量文件合集】 在Linux系统中,环境配置文件用于定制用户的Shell环境,包括定义环境变量、设置命令别名、定义启动脚本等。不同的Shell(如bash、zsh)有着各自对应的配置文件。 .bashrc:每新…

【推荐图书】深入浅出Spring Boot 3.x

推荐原因 这部SpringBoot3.x经典之作,时隔六年迎来重磅升级! 适合java开发相关读者 购买链接 商品链接:https://item.jd.com/14600442.html 介绍 书名:深入浅出Spring Boot 3.x ISBN:978-7-115-63282-1/ 作者&…

C语言之Const关键字与指针

目录 1 前言2 变量与指针的储存方式3 const int *var;int *const var;const int *const var;理解与区分4 总结 1 前言 实际开发过程中经常遇到const关键字作用于指针的情况,例如:const int *var;int *const var;const…

红薯小眼睛接口分析与Python脚本实现

文章目录 1. 写在前面2. 接口分析3. 算法脚本实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Py…

比 PIP 快 100 倍的安装工具

uv 是一个由 Rust 开发的 pip 工具,比 pip 快 100 倍,难以置信,不过真的是快太多了。 安装 在 Mac 上直接通过 brew install uv 安装即可。 venv 创建运行环境,默认当前目录下 .venv uv venv 依赖安装 uv pip install -r re…

Java | Leetcode Java题解之第217题存在重复元素

题目&#xff1a; 题解&#xff1a; class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set new HashSet<Integer>();for (int x : nums) {if (!set.add(x)) {return true;}}return false;} }

谷粒商城学习笔记-14-项目结构创建提交到码云

一&#xff0c;码云上创建工程仓库 1&#xff0c;,点击右上角加号&#xff0c;选择新建仓库 2&#xff0c;填充必要信息 ①仓库名称&#xff0c;可以理解为工程名称。 ②仓库介绍&#xff0c;添加关于仓库的说明。 ③仓库权限设置&#xff0c;如果是公司项目&#xff0c;一般…

InnoDB内部结构

在mysql数据库中&#xff0c;InnoDB存储引擎是最为常用和强大的存储引擎之一。了解InnoDB的内存结构对于优化数据库的性能&#xff0c;提高系统的稳定性和扩展性至关重要。本文将深入探讨InnoDB的内存结构。 1.Buffer Pool Buffer Pool: 缓冲池&#xff0c;其作用是用来缓存表…

为什么https比http更安全

读完本文&#xff0c;希望你能明白&#xff1a; HTTP通信存在什么问题HTTPS如何改进HTTP存在那些问题HTTPS工作原理是什么 一、什么是HTTPS HTTPS是在HTTP上建立SSL加密层&#xff0c;并对传输数据进行加密&#xff0c;是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感…

奇舞周刊第532期:奇舞团生日快乐~

时光荏苒&#xff0c;岁月如歌&#xff0c;转眼间&#xff0c;奇舞团13岁啦&#x1f382;&#x1f382;&#x1f382;《奇舞周刊》也陪伴大家来到了第532期。&#x1f44f;&#x1f44f; 致敬每一位读者和创作者&#xff0c;是你们的热情、陪伴和鼓励&#xff0c;让我们不断前进…

SpringBoot | 大新闻项目源码打包

对于一个完成好的后端项目&#xff0c;如何进行打包发送给其他人&#xff0c;在电脑上进行查看 1.在pom.xml添加&#xff1a; <build><plugins> <!-- 打包插件--><plugin><groupId>org.springframework.boot</groupId><art…

【HTML入门】第二课 - head标签下的常见表情们

目录 1 本节概要 2 head下的常见标签 2.1 网页编码设置 2.2 网页的标题 2.3 样式标签 3 head标签的内容不会显示到网页上 4 查看网页源代码 1 本节概要 上一节&#xff0c;我们说了HTML网页最基本的框架标签&#xff0c;说到标签分为head头部和body身体部分。这一小节呢…

文言文编程语言|老外来了也得先学论语

最近看到一个有意思的开源项目 wenyan&#xff0c;主要功能就是使用文言文来编写代码。 按项目说明 “Wenyan” 是一种遵循中国古典文学的语法和语调的编程语言。 此外&#xff0c;文言的字符集仅包含繁体汉字和「」引号&#xff0c;确保古代中国人能够阅读。 该编程语言的文…

C++:类的成员属性,公有,私有,保护

在C中级别&#xff0c;类的成员属性分为三种访问控制&#xff1a;公有&#xff08;public&#xff09;、私有&#xff08;private&#xff09;和保护&#xff08;protected&#xff09;。它们用于控制类内部数据对类外部的可见性和访问权限。设置访问属性对于封装和信息隐藏至关…