Podman入门全指南:安装、配置与运行容器

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

Podman入门全指南:安装、配置与运行容器

    • 前言
    • Podman简介
      • 什么是 Podman?
      • Podman 与 Docker 的主要区别
    • 安装Podman
      • 支持的操作系统和环境
      • 安装步骤详解
        • Linux
          • Ubuntu
          • CentOS/RHEL
        • MacOS
        • Windows (通过 WSL)
    • 配置Podman环境
      • 配置存储
      • 配置网络
      • 管理镜像仓库设置
    • Podman的基本命令和操作
      • 运行和管理容器
      • 拉取、构建和推送镜像
      • 查看和管理容器和镜像
    • Podman 的高级特性
      • 构建多阶段 Dockerfile
      • 网络和端口映射
      • 容器的资源限制和安全设置
    • 常见问题解答
      • 处理兼容性问题
      • 效能调优建议

前言

在容器技术日益成熟的今天,许多开发者和系统管理员都在寻找Docker的替代品。Podman,作为一种相对较新的容器化工具,不仅提供了与Docker类似的功能,而且在安全性和效率上也有所增强。如果你对Docker感到满意,那么你可能会对Podman的无守护进程架构和根权限运行的能力感到惊喜。本文将带你走进Podman的世界,从最基本的安装到运行你的第一个容器,一步步展示这一工具的魅力和实用性。

Podman简介

什么是 Podman?

Podman(Pod Manager)是一个开源的容器管理工具,它提供了一个与 Docker 类似的方式来管理容器。Podman 由 Red Hat 主导开发,是完全免费和开源的。它的设计旨在能够直接运行容器和 Pod(一组容器的集合),并且它与 Kubernetes 的容器生命周期管理兼容。

Podman 的一个主要特点是它不依赖于守护进程(daemon),与 Docker 不同,这使得 Podman 在系统中运行时更加安全和轻量。它使用标准的容器镜像,可以从 Docker 容器镜像库或任何其他兼容 OCI(Open Container Initiative)的容器镜像库拉取镜像。

Podman 与 Docker 的主要区别

  1. 守护进程:

    • Docker 使用单个守护进程(dockerd)来管理容器。所有的容器操作都必须通过这个守护进程进行,这可能会引入单点故障和安全风险。
    • Podman 不使用守护进程。它通过直接调用容器运行时接口(如 runC 或其他兼容 OCI 的运行时)来管理容器,从而提高了安全性,并减少了系统资源的占用。
  2. 安全性:

    • Docker 在执行容器时默认以 root 用户运行,这可能导致安全隐患。
    • Podman 默认支持以非 root 用户身份运行容器,这提供了更好的安全保障。
  3. 体系结构和功能:

    • Docker 配置和操作相对复杂,集成了多种功能,如镜像构建、容器运行、网络管理等。
    • Podman 提供了更加模块化的设计,可以单独使用或与其他工具(如 Buildah 和 Skopeo)集成使用,这些工具分别负责构建镜像和进行镜像仓库操作。
  4. 兼容性:

    • Podman 与 Docker 命令行界面(CLI)高度兼容。大多数情况下,用户可以直接将 docker 命令替换为 podman 命令,而不需要更改其他参数或脚本。
  5. 社区和生态系统:

    • Docker 拥有一个庞大且成熟的生态系统和社区,提供大量的资源和插件。
    • Podman 虽然是较新的技术,但正在快速发展,得到了 Red Hat 和开源社区的强力支持。

总的来说,Podman 提供了一个更安全、更灵活的容器管理解决方案,特别是对于希望避免使用守护进程或以非 root 权限运行容器的用户。

安装Podman

支持的操作系统和环境

Podman 可以在多种操作系统上安装,包括但不限于:

  1. Linux:大多数主流 Linux 发行版如 Fedora, CentOS, RHEL, Debian, Ubuntu 等都支持 Podman。
  2. MacOS:可以通过特定的安装步骤在 MacOS 上使用 Podman。
  3. Windows:Windows 用户可以通过 Windows Subsystem for Linux (WSL) 使用 Podman。

安装步骤详解

Linux
Ubuntu
  1. 更新软件包列表

    sudo apt-get update
    
  2. 安装软件包

    sudo apt-get -y install podman
    
  3. 验证安装

    podman --version
    
CentOS/RHEL
  1. 启用 Kubic 项目的仓库(对于 RHEL,首先需要启用 EPEL 仓库):

    sudo dnf -y install dnf-plugins-core
    sudo dnf -y copr enable rhcontainerbot/container-selinux
    sudo dnf -y module disable container-tools:rhel8
    sudo dnf -y module enable container-tools:3.0
    sudo dnf -y install podman
    
  2. 验证安装

    podman --version
    
MacOS
  1. 安装 Homebrew(如果尚未安装):

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. 安装 Podman

    brew install podman
    
  3. 初始化虚拟机

    podman machine init
    
  4. 启动虚拟机

    podman machine start
    
  5. 验证是否可以运行容器

    podman run hello-world
    
Windows (通过 WSL)
  1. 安装 WSL 2

    • 在 PowerShell 中运行:

      wsl --install
      
    • 重启电脑。

  2. 在 WSL 中安装 Ubuntu(从 Microsoft Store)。

  3. 在 Ubuntu 中更新并安装 Podman

    sudo apt-get update
    sudo apt-get install -y podman
    
  4. 验证安装

    podman --version
    

这些步骤提供了在不同操作系统上安装 Podman 的基本指南。如果您在安装过程中遇到问题,建议查看 Podman 的官方文档或搜索相关错误和解决方案。

配置Podman环境

配置 Podman 环境包括存储和网络配置,以及管理镜像仓库设置。下面将逐步介绍如何进行这些配置。

配置存储

Podman 使用存储配置文件来管理容器和镜像的存储设置。存储配置文件通常位于 /etc/containers/storage.conf

  1. 修改存储驱动
    Podman 默认使用 overlay 存储驱动,但您可以根据需要更改其他存储驱动,例如 vfs,尤其是在不支持 overlay 的旧内核上。

    打开 /etc/containers/storage.conf 文件,并找到 [storage] 部分,修改 driver 选项:

    [storage]
    driver = "overlay"
    
  2. 配置图像大小限制
    您可以设置新建容器的最大存储空间。

    storage.conf 文件中,添加或修改 size 选项:

    [storage.options]
    size = "20G"
    

配置网络

Podman 使用 CNI(Container Network Interface)插件来处理容器的网络配置。网络配置文件通常位于 /etc/cni/net.d/

  1. 创建网络配置文件
    创建一个名为 podman-network.conflist 的文件,并配置一个桥接网络:

    {"cniVersion": "0.4.0","name": "podman","plugins": [{"type": "bridge","bridge": "cni-podman0","isGateway": true,"ipMasq": true,"ipam": {"type": "host-local","ranges": [[{"subnet": "10.88.0.0/16"}]],"routes": [{"dst": "0.0.0.0/0"}]}},{"type": "portmap","capabilities": {"portMappings": true}}]
    }
    

    保存该文件到 /etc/cni/net.d/ 目录下。

  2. 重启 Podman
    重启 Podman 以应用网络配置:

    systemctl restart podman
    

管理镜像仓库设置

Podman 的镜像仓库配置位于 /etc/containers/registries.conf

  1. 配置镜像仓库
    您可以在此文件中指定和修改镜像仓库,包括镜像的搜索顺序和镜像拉取策略。

    打开 registries.conf 并配置:

    [registries.search]
    registries = ['docker.io', 'quay.io'][registries.insecure]
    registries = [][registries.block]
    registries = []
    
    • registries.search 定义搜索镜像时查询的仓库列表。
    • registries.insecure 列出了允许通过非 HTTPS 连接访问的仓库(通常不推荐)。
    • registries.block 可以阻止访问特定的仓库。

通过以上步骤,您可以对 Podman 进行有效的存储和网络配置,以及管理镜像仓库的设置,以满足您的特定需求和安全要求。

Podman的基本命令和操作

Podman 提供了一系列命令用于运行和管理容器,以及拉取、构建和推送镜像。以下是一些基本的 Podman 命令和操作:

运行和管理容器

  1. 运行容器

    podman run -d --name mycontainer nginx
    

    这条命令会以守护进程模式(后台运行)启动一个名为 mycontainer 的容器,运行 nginx 镜像。

  2. 列出正在运行的容器

    podman ps
    
  3. 查看所有容器(包括停止的)

    podman ps -a
    
  4. 停止容器

    podman stop mycontainer
    
  5. 启动已停止的容器

    podman start mycontainer
    
  6. 删除容器

    podman rm mycontainer
    

拉取、构建和推送镜像

  1. 拉取镜像

    podman pull nginx
    

    这条命令从默认的 Docker Hub 拉取最新的 nginx 镜像。

  2. 构建镜像
    假设你有一个名为 Dockerfile 的文件:

    podman build -t myimage .
    

    这条命令会使用当前目录下的 Dockerfile 来构建一个名为 myimage 的新镜像。

  3. 推送镜像到仓库

    podman push myimage docker.io/myusername/myimage:tag
    

    这条命令将本地的 myimage 镜像推送到 Docker Hub 上的 myusername/myimage 存储库,标签为 tag

查看和管理容器和镜像

  1. 查看本地镜像

    podman images
    
  2. 查看容器日志

    podman logs mycontainer
    
  3. 进入容器内部

    podman exec -it mycontainer /bin/bash
    

    这条命令会开启一个交互式会话,让你可以在运行的 mycontainer 容器中执行 /bin/bash

  4. 查看容器详细信息

    podman inspect mycontainer
    
  5. 查看容器的实时资源占用

    podman stats
    

这些基本命令涵盖了 Podman 在日常使用中的常见操作。熟练掌握这些命令可以帮助你有效地管理和操作容器以及镜像。

Podman 的高级特性

Podman 不仅提供了 Docker 的基本功能,还支持一些高级特性,包括构建多阶段 Dockerfile、网络和端口映射,以及容器的资源限制和安全设置。

构建多阶段 Dockerfile

多阶段构建是一种优化 Dockerfile 的方法,允许在一个 Dockerfile 中使用多个 FROM 语句,每个阶段可以使用不同的基础镜像,最终只将需要的最终成果复制到最后的镜像中。这样做可以减小最终镜像的大小,提高构建效率。

例如,以下是一个简单的多阶段 Dockerfile 示例:

# 第一阶段:构建阶段
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .# 第二阶段:运行阶段
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]

使用 Podman 构建这个 Dockerfile:

podman build -t myapp .

网络和端口映射

Podman 允许容器使用自定义网络设置,并映射端口到宿主机,类似于 Docker。

  1. 运行容器并映射端口

    podman run -d -p 8080:80 nginx
    

    这条命令会映射容器内部的 80 端口到宿主机的 8080 端口。

  2. 使用自定义网络
    创建一个自定义网络:

    podman network create mynetwork
    

    运行容器时指定网络:

    podman run -d --network mynetwork nginx
    

容器的资源限制和安全设置

Podman 提供了多种资源限制和安全设置,以确保容器在一个控制和安全的环境中运行。

  1. 限制 CPU 和内存

    podman run -d --name mycontainer --cpus=2 --memory=512m nginx
    

    这条命令限制容器使用最多 2 个 CPU 和 512 MB 内存。

  2. 使用 rootless 模式
    Podman 的一个显著特点是支持无 root 权限运行容器,增加了安全性。默认情况下,如果不是以 root 用户运行 Podman,它将在 rootless 模式下运行。

  3. 安全性选项
    可以通过 --security-opt 标志来设置 SELinux, AppArmor, Seccomp 等安全相关的选项。例如,使用自定义的 AppArmor 配置:

    podman run --security-opt apparmor=your_profile_name nginx
    

这些高级特性使得 Podman 不仅适用于基本的容器操作,还可以满足更复杂的应用场景和提高容器的安全性。

常见问题解答

处理兼容性问题

问题1:Docker Compose 文件不兼容

  • 解决方案:Podman 从版本 3.0 开始支持 docker-compose。确保您的 Podman 版本至少是 3.0。此外,您可以使用 podman-compose,这是一个专为 Podman 设计的工具,可以处理 Docker Compose 文件。

问题2:Docker CLI 脚本不直接兼容

  • 解决方案:大部分 Docker CLI 命令在 Podman 中都有直接对应的命令,因为 Podman 设计时就考虑了与 Docker 的 CLI 兼容性。对于不兼容的部分,您可能需要修改脚本中的部分命令或参数。Podman 的文档和社区可以提供具体的指导和支持。

问题3:Windows 上的限制

  • 解决方案:如果在 Windows 上使用 WSL2 运行 Podman,并遇到性能或兼容性问题,检查是否为 WSL2 分配了足够的资源,并确保您的 WSL2 和 Podman 版本都是最新的。

效能调优建议

建议1:优化存储配置

  • 考虑调整 /etc/containers/storage.conf 中的存储驱动设置,以适应您的特定需求。例如,更改图像存储位置或调整图像层的大小限制,可以改善 I/O 性能。

建议2:调整资源限制

  • 使用 Podman 运行容器时,合理配置 CPU 和内存资源限制,可以优化容器的性能。例如,通过 --cpus--memory 选项,为运行重要应用的容器分配更多资源,而对后台服务容器施加更严格的限制。

建议3:使用 rootless 模式

  • 尽管 rootless 模式可能会略微降低性能,但它提高了系统的安全性。可以通过优化 rootless 容器的网络配置和存储访问策略来抵消这种性能损失。

建议4:网络优化

  • 网络配置对容器性能有显著影响。使用 Podman 提供的网络设置,如创建效率更高的自定义网络,或优化现有网络配置,以减少网络延迟和提高数据传输效率。

建议5:定期清理

  • 定期清理未使用的镜像、容器和卷,可以释放存储空间,减少存储开销。使用 podman system prune 命令可以自动完成这些清理工作。

通过这些方法,您可以解决 Podman 使用中遇到的兼容性问题,并优化 Podman 的运行效能,确保容器应用运行更加高效、稳定。

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

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

相关文章

双系统下删除ubuntu

絮絮叨叨 由于我在安装Ubuntu的时候没有自定义安装位置,而是使用与window共存的方式让Ubuntu自己选择安装位置,导致卸载时我不知道去格式化哪个分区,查阅多方资料后无果,后在大佬帮助下找到解决方案 解决步骤 1、 插上Ubuntu安…

Axure如何调起浏览器的打印功能

Axure如何调起浏览器的打印功能 答:javascript:window.print(); 不明白的继续往下看 应用场景: 原型设计中,页面上的打印按钮,需要模拟操作演示,需要点击指定的按钮时,唤起浏览器的打印功能&#xff08…

使用Pandas从Excel文件中提取满足条件的数据并生成新的文件

目录 一、引言 二、环境准备 三、读取Excel文件 四、数据筛选 五、保存为新的Excel文件 六、案例与代码总结 七、进阶用法与注意事项 八、结语 在数据处理的日常工作中,我们经常需要从大量数据中筛选出满足特定条件的数据集。Pandas是一个强大的Python数据分…

比 PSD.js 更强的下一代 PSD 解析器,支持 WebAssembly

比 PSD.js 更强的下一代 PSD 解析器,支持 WebAssembly 1.什么是 webtoon/ps webtoon/ps 是 Typescript 中轻量级 Adobe Photoshop .psd/.psb 文件解析器,对 Web 浏览器和 NodeJS 环境提供支持,且做到零依赖。 Fast zero-dependency PSD par…

2024 年最好的免费数据恢复软件,您可以尝试的几个数据恢复软件

由于系统崩溃而丢失数据可能会给用户带来麻烦。我们将重要的宝贵数据和个人数据保存在我们的 PC、笔记本电脑和其他数字设备上。您可能会因分区丢失、意外删除文件和文件夹、格式化硬盘驱动器而丢失数据。数据丢失是不幸的,如果您不小心从系统中删除了文件或数据&am…

深入理解 Srping IOC

什么是 Spring IOC? IOC 全称:Inversion of Control,翻译为中文就是控制反转,IOC 是一种设计思想,IOC 容器是 Spring 框架的核心,它通过控制和管理对象之间的依赖关系来实现依赖注入(Dependenc…

正点原子[第二期]ARM(I.MX6U)裸机篇学习笔记-1.2

前言: 本文是来自哔哩哔哩网站上视频“正点原子[第二期]Linux之ARM(MX6U)裸机篇”的学习笔记,在这里会记录下正点原子Linux ARM MX6ULL 开发板根据配套的哔哩哔哩学习视频所作的实验和笔记内容。本文大量的引用了正点原子哔哔哩网…

结构体内存对齐(未完成版)

前言 我们已经掌握了结构体的基本使用了。 现在我们深入讨论一个问题:计算机构体的大小。 这也是一个特别热门的考点:结构体内存对齐 练习导入 对齐规则

vue项目npm run build 打包之后如何在本地访问

vue项目npm run build 打包之后如何在本地访问 如果直接访问时,则会报错如下的信息: 报错码: Access to script at file:///D:/assets/index-DDVBfHVo.js from origin null has been blocked by CORS policy: Cross origin requests are on…

【转载】如何在MacBookPro上把Ubuntu安装到移动硬盘里过程记录

以下主要目的是记录安装过程中的问题,安装步骤等信息怕忘记 环境信息: Mac :macOS High Sierra 10.13.6 内存8G(Swap时用到) Ubuntu: ubuntu-22.04.4-desktop-amd64.ios 金士顿U盘:Kingston-64G 烧录软件:balenaEtcher…

牛客NC371 验证回文字符串(二)【简单 双指针 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/130e1a9eb88942239b66e53ec6e53f51 思路 直接看答案,不难参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可…

Atlassian Jira 信息泄露漏洞(CVE-2019-3403) 排查思路

Atlassian Jira: 企业广泛使用的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。 简述: 近日发现多个内网IP触发的Atlassian Jira 信息泄露漏洞的告警。 告警的检测规…

openvoice v2 声音克隆使用案例

参考: https://github.com/myshell-ai/OpenVoice/blob/main/docs/USAGE.md https://www.wehelpwin.com/article/4940 安装 1)下载OpenVoice项目安装 2)MeloTTS安装 参考:https://blog.csdn.net/weixin_42357472/article/details/136320097 pip install git+https://gith…

2398.预算内最多的机器人数目

我第一个手搓的hard的单调队列题目......灵神yyds 思路解析: 我做的时候感觉这个题目有点歧义,我以为他的连续运行是时间上连续,所以我开始写的代码是选择最多的子序列(可以不连续),使得不超过budget,这个求最多子序列的代码会在最后给出,不保证完全正确(因为没有太多测试点),…

element-ui et -i 编译默认主题报错:ReferenceError: primordials is not defined

报错信息如下 fs.js:40 } primordials;^ ReferenceError: primordials is not defined导致这个问题的原因:node和gulp版本冲突!! 我使用的是node 14版本 解决方法: 看了好几个帖子,都推荐使用node 11.15.0版本&am…

华为ensp中BGP(边界网关协议)基础原理及配置命令

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月27日10点04分 BGP(边界网关协议)是一种路由协议,用于在互联网中的不同自治系统(AS)之间交换路由信息。它…

浅谈操作系统中的重要概念——线程

文章目录 一、进程概念产生的原因二、进程的弊端三、线程3.1、线程复用结构体PCB3.2、多线程弊端3.2.1、拖慢程序的效率3.2.2、产生线程安全问题3.2.3、导致整个进程终止 3.3、怎么判断一个线程是否执行完毕??3.4、怎么终止一个线程?&#xf…

【学习笔记二十八】EWM和QM集成的后台配置和前台展示

一、EWM和QM集成概述 SAP EWM(扩展仓库管理)和QM(质量管理)的集成是SAP系统中一个重要的特性,它允许企业在仓库管理过程中实现质量控制和检验流程的自动化。以下是关于EWM和QM集成的一些关键点概述: 集成优势:通过集成,企业可以确保仓库中的物料在收货、存储、…

csdn的复制代码功能如何实现

页面布局分析&#xff1a; 按钮在文本框里面&#xff0c;所以文本框是父元素&#xff0c;按钮是子元素。要使得按钮在文本框的右上角&#xff0c;需要使用绝对定位。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…

实现ALV页眉页脚

1、文档介绍 在ALV中&#xff0c;可以通过增加页眉和页脚&#xff0c;丰富ALV的展示。除了基本的页眉和页脚&#xff0c;还可以通过插入HTML代码的方式展示更加丰富的页眉和页脚&#xff0c;本篇文章将介绍ALV和OOALV中页眉页脚的使用。 2、ALV页眉页脚 效果如下 2.1、显示内…