Podman入门全指南:安装、配置与运行容器
电脑安全软件安装与配置指南 #生活技巧# #数码产品使用技巧# #电脑操作指南#
2024-06-04 8623 发布于黑龙江
版权
举报
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
前言
在容器技术日益成熟的今天,许多开发者和系统管理员都在寻找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 的主要区别守护进程:Docker 使用单个守护进程(dockerd)来管理容器。所有的容器操作都必须通过这个守护进程进行,这可能会引入单点故障和安全风险。Podman 不使用守护进程。它通过直接调用容器运行时接口(如 runC 或其他兼容 OCI 的运行时)来管理容器,从而提高了安全性,并减少了系统资源的占用。安全性:Docker 在执行容器时默认以 root 用户运行,这可能导致安全隐患。Podman 默认支持以非 root 用户身份运行容器,这提供了更好的安全保障。体系结构和功能:Docker 配置和操作相对复杂,集成了多种功能,如镜像构建、容器运行、网络管理等。Podman 提供了更加模块化的设计,可以单独使用或与其他工具(如 Buildah 和 Skopeo)集成使用,这些工具分别负责构建镜像和进行镜像仓库操作。兼容性:Podman 与 Docker 命令行界面(CLI)高度兼容。大多数情况下,用户可以直接将 docker 命令替换为 podman 命令,而不需要更改其他参数或脚本。社区和生态系统:Docker 拥有一个庞大且成熟的生态系统和社区,提供大量的资源和插件。Podman 虽然是较新的技术,但正在快速发展,得到了 Red Hat 和开源社区的强力支持。总的来说,Podman 提供了一个更安全、更灵活的容器管理解决方案,特别是对于希望避免使用守护进程或以非 root 权限运行容器的用户。
安装Podman
支持的操作系统和环境Podman 可以在多种操作系统上安装,包括但不限于:
Linux:大多数主流 Linux 发行版如 Fedora, CentOS, RHEL, Debian, Ubuntu 等都支持 Podman。MacOS:可以通过特定的安装步骤在 MacOS 上使用 Podman。Windows:Windows 用户可以通过 Windows Subsystem for Linux (WSL) 使用 Podman。安装步骤详解LinuxUbuntu更新软件包列表:sudo apt-get update
AI 代码解读
安装软件包:sudo apt-get -y install podman
AI 代码解读
验证安装:podman --version
AI 代码解读
CentOS/RHEL启用 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
AI 代码解读
验证安装:podman --version
AI 代码解读
MacOS安装 Homebrew(如果尚未安装):/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
AI 代码解读
安装 Podman:brew install podman
AI 代码解读
初始化虚拟机:podman machine init
AI 代码解读
启动虚拟机:podman machine start
AI 代码解读
验证是否可以运行容器:podman run hello-world
AI 代码解读
Windows (通过 WSL)安装 WSL 2:在 PowerShell 中运行:wsl --install
AI 代码解读
重启电脑。在 WSL 中安装 Ubuntu(从 Microsoft Store)。
在 Ubuntu 中更新并安装 Podman:
sudo apt-get update sudo apt-get install -y podman
AI 代码解读
验证安装:podman --version
AI 代码解读
这些步骤提供了在不同操作系统上安装 Podman 的基本指南。如果您在安装过程中遇到问题,建议查看 Podman 的官方文档或搜索相关错误和解决方案。
配置Podman环境
配置 Podman 环境包括存储和网络配置,以及管理镜像仓库设置。下面将逐步介绍如何进行这些配置。
配置存储Podman 使用存储配置文件来管理容器和镜像的存储设置。存储配置文件通常位于 /etc/containers/storage.conf。
修改存储驱动:Podman 默认使用 overlay 存储驱动,但您可以根据需要更改其他存储驱动,例如 vfs,尤其是在不支持 overlay 的旧内核上。
打开 /etc/containers/storage.conf 文件,并找到 [storage] 部分,修改 driver 选项:
[storage] driver = "overlay"
AI 代码解读
配置图像大小限制:您可以设置新建容器的最大存储空间。
在 storage.conf 文件中,添加或修改 size 选项:
[storage.options] size = "20G"
AI 代码解读
配置网络Podman 使用 CNI(Container Network Interface)插件来处理容器的网络配置。网络配置文件通常位于 /etc/cni/net.d/。
创建网络配置文件:创建一个名为 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} } ] }
AI 代码解读
保存该文件到 /etc/cni/net.d/ 目录下。重启 Podman:重启 Podman 以应用网络配置:
systemctl restart podman
AI 代码解读
管理镜像仓库设置Podman 的镜像仓库配置位于 /etc/containers/registries.conf。
配置镜像仓库:您可以在此文件中指定和修改镜像仓库,包括镜像的搜索顺序和镜像拉取策略。打开registries.conf并配置:[registries.search] registries = ['docker.io', 'quay.io'] [registries.insecure] registries = [] [registries.block] registries = []
AI 代码解读
registries.search 定义搜索镜像时查询的仓库列表。registries.insecure 列出了允许通过非 HTTPS 连接访问的仓库(通常不推荐)。registries.block 可以阻止访问特定的仓库。通过以上步骤,您可以对 Podman 进行有效的存储和网络配置,以及管理镜像仓库的设置,以满足您的特定需求和安全要求。
Podman的基本命令和操作
Podman 提供了一系列命令用于运行和管理容器,以及拉取、构建和推送镜像。以下是一些基本的 Podman 命令和操作:
运行和管理容器运行容器:podman run -d --name mycontainer nginx
AI 代码解读
这条命令会以守护进程模式(后台运行)启动一个名为 mycontainer 的容器,运行 nginx 镜像。列出正在运行的容器:podman ps
AI 代码解读
查看所有容器(包括停止的):podman ps -a
AI 代码解读
停止容器:podman stop mycontainer
AI 代码解读
启动已停止的容器:podman start mycontainer
AI 代码解读
删除容器:podman rm mycontainer
AI 代码解读
拉取、构建和推送镜像拉取镜像:podman pull nginx
AI 代码解读
这条命令从默认的 Docker Hub 拉取最新的 nginx 镜像。构建镜像:假设你有一个名为 Dockerfile 的文件:
podman build -t myimage .
AI 代码解读
这条命令会使用当前目录下的 Dockerfile 来构建一个名为 myimage 的新镜像。推送镜像到仓库:podman push myimage docker.io/myusername/myimage:tag
AI 代码解读
这条命令将本地的 myimage 镜像推送到 Docker Hub 上的 myusername/myimage 存储库,标签为 tag。查看和管理容器和镜像查看本地镜像:podman images
AI 代码解读
查看容器日志:podman logs mycontainer
AI 代码解读
进入容器内部:podman exec -it mycontainer /bin/bash
AI 代码解读
这条命令会开启一个交互式会话,让你可以在运行的 mycontainer 容器中执行 /bin/bash。查看容器详细信息:podman inspect mycontainer
AI 代码解读
查看容器的实时资源占用:podman stats
AI 代码解读
这些基本命令涵盖了 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"]
AI 代码解读
使用 Podman 构建这个 Dockerfile:
podman build -t myapp .
AI 代码解读
网络和端口映射Podman 允许容器使用自定义网络设置,并映射端口到宿主机,类似于 Docker。
运行容器并映射端口:podman run -d -p 8080:80 nginx
AI 代码解读
这条命令会映射容器内部的 80 端口到宿主机的 8080 端口。使用自定义网络:创建一个自定义网络:
podman network create mynetwork
AI 代码解读
运行容器时指定网络:podman run -d --network mynetwork nginx
AI 代码解读
容器的资源限制和安全设置Podman 提供了多种资源限制和安全设置,以确保容器在一个控制和安全的环境中运行。
限制 CPU 和内存:podman run -d --name mycontainer --cpus=2 --memory=512m nginx
AI 代码解读
这条命令限制容器使用最多 2 个 CPU 和 512 MB 内存。使用 rootless 模式:Podman 的一个显著特点是支持无 root 权限运行容器,增加了安全性。默认情况下,如果不是以 root 用户运行 Podman,它将在 rootless 模式下运行。
安全性选项:
可以通过 --security-opt 标志来设置 SELinux, AppArmor, Seccomp 等安全相关的选项。例如,使用自定义的 AppArmor 配置:
podman run --security-opt apparmor=your_profile_name nginx
AI 代码解读
这些高级特性使得 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 的运行效能,确保容器应用运行更加高效、稳定。
相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
网址:Podman入门全指南:安装、配置与运行容器 https://www.yuejiaxmz.com/news/view/1393783
相关内容
docker / podman 启动、停止全部容器的 命令Podman设置容器开机自启
智能安防系统的安装和配置指南
WiFi密码修改入口:安全配置指南
智能家居安全系统配置指南.docx
Tplink密码设置:安全配置指南
未来科技趋势下的机器人厨房全面安装与配置详解:高级智能化系统实践指南
春运出行安全指南
家庭网络安全配置指南.docx
安全指南

