如何在 CentOS 7/RHEL 7 上安装 Podman 4.x |如何在 CentOS 7/RHEL 7 上安装 Podman 4.x |如何在 CentOS 7/RHEL 7 上安装 Podman 4.x |如何在 CentOS 7/RHEL 7 上安装 Podman 4.x |
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 CentOS 7/RHEL 7 上安装 Podman 4.x |

发表 admin at 2025年2月28日
类别
  • 未分类
标签

Podman(Pod Manager Tool 的简称)是一个无守护程序容器引擎,旨在帮助您在大多数 Linux 系统上开发、管理和运行开放容器计划 (OCI) 容器。 Podman 是 Docker 的终极替代品。 Podman 是 openSUSE Kubic 和 Fedora CoreOS(经过认证的 Kubernetes 发行版)中的默认容器运行时。

您可以使用 Podman 使用 Dockerfile 和一系列与 Docker 开源引擎相同的命令来创建符合 OCI 的容器映像。一个示例是 podman build 命令,它执行与 docker build 命令相同的任务。换句话说,Podman 提供了 Docker 开源引擎的直接替代品。

Podman 的一些主要优势包括:

  • 它以无根模式运行容器 – 能够运行更安全的无根容器,因为它们运行时没有任何附加权限
  • 原生 systemd 集成 – 使用 Podman,您可以创建 systemd 单元文件并将容器作为系统服务运行
  • 不需要守护进程 – 由于 Podman 是无守护进程的,Podman 在空闲时的资源需求要低得多。

在 CentOS 7/RHEL 7 上安装 Podman 4.x

如果您在 CentOS 7/RHEL 7 上从操作系统默认存储库安装 Podman,则会安装该软件的旧版本。以下是 CentOS 7 虚拟机的输出。

$ podman version
Version:            1.6.4
RemoteAPI Version:  1
Go Version:         go1.12.12
OS/Arch:            linux/amd64

在本文中,我们将介绍在 CentOS 7/RHEL 7 上安装 Podman 4.x。在 CentOS 7/RHEL 7 系统上获取 Podman 4.x 的途径是从源代码构建应用程序。

在继续之前,请卸载系统中任何旧版本的 Podman。

sudo yum -y remove podman

步骤 1 – 安装 Podman 4.x 构建工具

由于我们是从源代码构建软件,因此必须安装所需的所有工具。确保 EPEL 存储库已在您的系统中安装并启用。

sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

更新系统上的所有软件包并重新启动。

sudo yum -y update
sudo reboot

在 CentOS 7/RHEL 7 上安装开发工具:

sudo yum -y install "@Development Tools"

通过运行以下命令安装其他依赖项:

sudo yum install -y curl \
  gcc \
  make \
  device-mapper-devel \
  git \
  btrfs-progs-devel \
  conmon \
  containernetworking-plugins \
  containers-common \
  git \
  glib2-devel \
  glibc-devel \
  glibc-static \
  golang-github-cpuguy83-md2man \
  gpgme-devel \
  iptables \
  libassuan-devel \
  libgpg-error-devel \
  libseccomp-devel \
  libselinux-devel \
  pkgconfig \
  systemd-devel \
  autoconf \
  python3 \
  python3-devel \
  python3-pip \
  yajl-devel \
  libcap-devel

等待这些依赖项安装完成,然后继续执行步骤 2。

步骤 2 – 在 CentOS 7/RHEL 7 上安装 Golang

使用共享的链接在 CentOS 7/RHEL 7 上安装 Go:

  • 在 CentOS 7/RHEL 7 上安装 Go (Golang)

安装成功后检查Go版本:

$ go version
go version go1.19 linux/amd64

步骤 3 – 安装 runc 和 conmon

Conmon 用于监视 OCI 运行时,并且该软件包预计安装在系统上。可以使用下面共享的命令来完成安装。

cd ~
git clone https://github.com/containers/conmon
cd conmon
export GOCACHE="$(mktemp -d)"
make
sudo make podman
cd ..

安装后检查版本。

$ conmon --version
conmon version 2.0.8
commit: f85c8b1ce77b73bcd48b2d802396321217008762

对 runc 包执行相同的构建。

git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="selinux seccomp"
sudo cp runc /usr/bin/runc
cd ~/

使用-version命令选项来检查版本。

$ runc --version
runc version 1.1.0+dev
commit: v1.1.0-276-gbc13e33
spec: 1.0.2-dev
go: go1.19
libseccomp: 2.3.1

步骤 4 – 为 Podman 设置 CNI 网络

创建/etc/containers目录用于存储CNI网络配置文件。

sudo mkdir -p /etc/containers

下载配置示例并放置创建的目录:

sudo curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
sudo curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json

步骤 5 – 在 CentOS 7/RHEL 7 上安装 Podman 4.x

安装 wget 命令行实用程序包。

sudo yum -y install wget

从 Github 存储库下载最新版本的 Podman 源代码。

TAG=4.1.1
rm -rf podman*
wget https://github.com/containers/podman/archive/refs/tags/v${TAG}.tar.gz

使用 tar 命令提取下载的文件:

tar xvf v${TAG}.tar.gz

导航到 podman 目录并开始构建过程。

cd podman*/
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr

如果您在构建过程中遇到以下错误:

gcc errors for preamble:
In file included from vendor/github.com/proglottis/gpgme/data.go:6:0:
./go_gpgme.h:15:1: error: unknown type name 'gpgme_off_t'
 extern gpgme_off_t gogpgme_data_seek(gpgme_data_t dh, gpgme_off_t offset, int whence);
 ^
./go_gpgme.h:15:55: error: unknown type name 'gpgme_off_t'
 extern gpgme_off_t gogpgme_data_seek(gpgme_data_t dh, gpgme_off_t offset, int whence);
                                                       ^

make: *** [bin/podman] Error 2

该问题已在 Podman 4 错误问题页面中捕获。建议的快速修复是更新 pgpme 软件包。

sudo yum remove  gpgme-devel -y
sudo yum -y install https://cbs.centos.org/kojifiles/packages/gpgme/1.7.1/0.el7.centos.1/x86_64/gpgme-1.7.1-0.el7.centos.1.x86_64.rpm
sudo yum -y install https://cbs.centos.org/kojifiles/packages/gpgme/1.7.1/0.el7.centos.1/x86_64/gpgme-devel-1.7.1-0.el7.centos.1.x86_64.rpm

更新后重试您的构建。

make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr

可用构建标签、功能和依赖项的列表:

Build Tag Feature Dependency
apparmor apparmor support libapparmor
exclude_graphdriver_btrfs exclude btrfs libbtrfs
exclude_graphdriver_devicemapper exclude device-mapper libdm
libdm_no_deferred_remove exclude deferred removal in libdm libdm
seccomp syscall filtering libseccomp
selinux selinux process and mount labeling  
systemd journald logging libsystemd

将注释添加到 override_kernel_check 配置行。

sudo sed -ie 's/override_kernel_check/#override_kernel_check/g' /etc/containers/storage.conf

构建后,您可以检查 CentOS 7/RHEL 7 上安装的 Podman 3 的版本。

$ podman  version
Client:       Podman Engine
Version:      4.1.1
API Version:  4.1.1
Go Version:   go1.19
Built:        Mon Jul 11 11:30:09 2022
OS/Arch:      linux/amd64

让我们使用 podman pull 命令测试镜像下载:

$ podman pull docker.io/library/alpine:latest
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 2408cc74d12b done
Copying config e66264b987 done
Writing manifest to image destination
Storing signatures
e66264b98777e12192600bf9b4d663655c98a090072e1bab49e233d7531d1294

您还可以运行 Docker Hello World 容器来确认其是否有效:

$ podman run docker.io/library/hello-world
Trying to pull docker.io/library/hello-world:latest...
Getting image source signatures
Copying blob 2db29710123e done
Copying config feb5d9fea6 done
Writing manifest to image destination
Storing signatures

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

这是使用 Podman 的参考指南:

  • 使用 Podman 和 Libpod 运行 Docker 容器

更多关于容器化的文章:

  • 如何使用 Vagrant 管理 Podman 容器
  • 在 Podman|Docker 容器中运行 Microsoft SQL Server
  • 在 Docker/Podman 容器中运行 FreeIPA 服务器
©2015-2025 Norria support@norria.com