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.tpcf.cn/news/829701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…

初识ChatGPT

初识ChatGPT AIGC这么火热,了解一下?本文主要通过ChatGPT整理了人工智能和GPT相关的很多概念,看完之后,应该能瞥见人工智能的冰山一角。 参考 GPT-4预示着前端开发的终结?你准备好面对无法预测的技术挑战了吗&#…

MATLAB初学者入门(23)—— 旅行商问题(TSP)优化

旅行商问题(TSP, Traveling Salesman Problem)是一个经典的优化问题,要求找到一个最短的路线,使得旅行商从一个城市出发,经过所有城市一次后,回到原出发点。这是一个NP难问题,在数学优化和计算机…

深入理解 Srping IOC

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

无人机在测绘领域的应用

你知道吗?无人机在测绘领域的应用已经掀起了一场技术革命! 🚀它不仅可以高效完成测绘任务,还能在恶劣环境下工作,真是测绘界的超级英雄啊! 想象一下,无人机像一只自由翱翔的鸟儿,在…

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

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

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

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

electron ipcRenderer.invoke 和 ipcMain.handle 介绍

ipcMain.handle 是 Electron 主进程中的一个方法,用于处理从渲染进程发送过来的 IPC 请求,并返回一个 Promise。渲染进程可以使用 ipcRenderer.invoke 方法发送 IPC 请求到主进程,并等待主进程处理完成后返回结果。 在主进程中 (main.ts)&am…

Python构建学生信息管理系统:前端页面开发

Python构建学生信息管理系统:前端页面开发 在本系列博客的前几篇中,我们详细介绍了学生信息管理系统(SIMS)的需求分析、环境搭建、工程初始化、数据库设计、后端逻辑以及安全设计。在本文中,我们将专注于前端页面的开…

材质系统:关于PBR(Physically Based Rendering)需要知道的一些事

目录 前言 1. 什么是PBR? 2. 为什么PBR在近期开始流行 3. PBR材质与其他渲染器中材质(如Vray材质、Enscape中的材质)的区别是什么? 4. 为什么Vray之类的渲染器从一开始没有使用PBR材质系统? 前言 本文内容基于对图…

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…

python读取文件

定义: python提供了读取任何文件的一种方法,可以读取计算机磁盘中文件中的数据 前提: 1,得准备一个文件 2,读取文件: 方式一: 文件模式: r:只读(read) w:写入(write) a:添加(add) 文…