Podman 安装说明

2021/08 02 14:08

Podman 安装说明
安装 Podman 的打包版本
苹果系统
Podman 是一个运行 Linux 容器的工具。您可以从 MacOS 桌面执行此操作,只要您可以访问在主机上的 VM 内运行或通过网络可用的 linux 机器。您需要安装远程客户端,然后设置 ssh 连接信息。

远程客户端
Mac 客户端可通过Homebrew 获得:

brew install podman
视窗
Podman 是一个运行 Linux 容器的工具。您可以从 Windows 桌面执行此操作,只要您可以访问在主机上的 VM 内运行或通过网络可用的 linux 机器。您需要安装远程客户端,然后在 podman-remote.conf 文件中设置 ssh 连接信息。Podman 也可以在 Linux 系统的 Windows 子系统中运行,请查看下面的链接以查看有关如何完成的说明。

远程客户端
适用于 Windows 的最新远程客户端
适用于 Linux 的 Windows 子系统 (WSL) 2.0
如何使用 WSL2 在 Windows 上运行 Podman
Linux 发行版
Arch Linux和Manjaro Linux
sudo pacman -S podman
如果在无根模式下运行 Podman 时遇到问题,请 按照此处的说明进行操作

CentOS
Podman 在 CentOS 7 的默认 Extras 存储库和 CentOS 8 和 Stream 的 AppStream 存储库中可用。尽管可用版本通常落后于最新的上游版本,但它仍然是生产环境的首选版本。

sudo yum -y install podman
该Kubic项目 提供CentOS的8和流更新包。这些软件包尚未通过正式的 Red Hat QA 流程,因此可能不适用于生产环境。

# CentOS 8
sudo dnf -y module disable container-tools
sudo dnf -y install ‘dnf-command(copr)’
sudo dnf -y copr enable rhcontainerbot/container-selinux
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo
# OPTIONAL FOR RUNC USERS: crun will be installed by default. Install runc first if you prefer runc
sudo dnf -y –refresh install runc
# Install Podman
sudo dnf -y –refresh install podman

# CentOS Stream
sudo dnf -y module disable container-tools
sudo dnf -y install ‘dnf-command(copr)’
sudo dnf -y copr enable rhcontainerbot/container-selinux
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8_Stream/devel:kubic:libcontainers:stable.repo
# OPTIONAL FOR RUNC USERS: crun will be installed by default. Install runc first if you prefer runc
sudo dnf -y –refresh install runc
# Install Podman
sudo dnf -y –refresh install podman
笔记:

CentOS 8 Kubic 存储库将在 CentOS 8 本身的生命周期内继续接收 Podman v3.0+ 的更新。
建议用户切换到更新版本的 CentOS 以接收最新版本的 Podman。
强烈建议 CentOS Stream 用户更喜欢来自默认 CentOS 存储库的软件包,因为它们通常是最新的,并且已知已通过 RHEL 的门控测试。
Debian
podman 包在Bullseye (testing) 分支中可用,这将是下一个稳定版本 (Debian 11) 以及 Debian Unstable/Sid。

# Debian Testing/Bullseye or Unstable/Sid
sudo apt-get update
sudo apt-get -y install podman
软呢帽
sudo dnf -y install podman
Fedora- CoreOS , Fedora SilverBlue
内置,无需安装

Gentoo
sudo emerge app-emulation/podman
开放嵌入式
Podman 及其依赖项的 Bitbake 配方在元虚拟化层中可用 。将该层添加到您的 OpenEmbedded 构建环境并使用以下命令构建 Podman:

bitbake podman
openSUSE
sudo zypper install podman
openSUSE Kubic
内置,无需安装

树莓派操作系统 arm64(测试版)
Raspberry Pi OS 使用标准的 Debian 存储库,因此它与 Debian 的 arm64 存储库完全兼容。您只需按照Debian的步骤安装 Podman。

RHEL7
订阅,然后启用 Extras 频道并安装 Podman。

sudo subscription-manager repos –enable=rhel-7-server-extras-rpms
sudo yum -y install podman
RHEL8
Podmancontainer-tools与 Buildah 和 Skopeo 一起包含在模块中。

sudo yum module enable -y container-tools:rhel8
sudo yum module install -y container-tools:rhel8
这container-tools:rhel8是快速应用程序流,包含工具的最新滚动版本。将container-tools:2.0流用于 Podman 1.6 的稳定版本。该命令yum module list container-tools显示可用的流。

Ubuntu
podman 包在 Ubuntu 20.10 和更新版本的官方存储库中可用。

# Ubuntu 20.10 and newer
sudo apt-get -y update
sudo apt-get -y install podman
如果您更喜欢更新的(虽然没有经过充分测试)的软件包,Kubic 项目 为活动的 Ubuntu 20.04 和更新版本提供了软件包(它也应该适用于 Pop!_OS 等直接衍生产品)。查看Kubic 项目页面 以获取支持的 Ubuntu 版本和架构组合列表。注意:sudo apt-get -y upgrade 如果没有它就无法安装 Podman,则在某些情况下可能需要该命令。Kubic 包的构建源可以在这里找到。

注意:在 Ubuntu 20.10 和更新版本上,我们强烈建议您仅使用来自 Kubic 存储库或官方 Ubuntu 存储库的 Buildah、Podman 和 Skopeo。混合和匹配可能会导致不可预知的情况,包括安装冲突。

. /etc/os-release
echo “deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /” | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L “https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key” | sudo apt-key add –
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install podman
安装 Podman 的开发版本
CentOS
Podman 在适用于 CentOS 8 和 Stream 的 AppStream 存储库中可用,这些也是在生产环境中使用的首选。但是,可用版本可能比上游版本旧。

该Kubic项目 提供CentOS的8和流更新包。这些没有像官方 CentOS 软件包那样经过充分测试,因此请谨慎行事。

# CentOS 8
sudo dnf -y module disable container-tools
sudo dnf -y install ‘dnf-command(copr)’
sudo dnf -y copr enable rhcontainerbot/container-selinux
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:testing.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/CentOS_8/devel:kubic:libcontainers:testing.repo
# OPTIONAL FOR RUNC USERS: crun will be installed by default. Install runc first if you prefer runc
sudo dnf -y –refresh install runc
# Install Podman
sudo dnf -y –refresh install podman

# CentOS Stream
sudo dnf -y module disable container-tools
sudo dnf -y install ‘dnf-command(copr)’
sudo dnf -y copr enable rhcontainerbot/container-selinux
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:testing.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/CentOS_8_Stream/devel:kubic:libcontainers:testing.repo
# OPTIONAL FOR RUNC USERS: crun will be installed by default. Install runc first if you prefer runc
sudo dnf -y –refresh install runc
# Install Podman
sudo dnf -y –refresh install podman
软呢帽
在updates-testing 向所有 Fedora 用户发布之前,您可以在 Fedora 的存储库中测试最新的 Podman 。

sudo dnf update –refresh –enablerepo=updates-testing podman
如果您使用来自 Fedora 的较新的 Podman 软件包updates-testing,我们将感谢您+1对Fedora 更新管理系统 Bodhi的反馈。

Ubuntu
Kubic 项目为 Ubuntu 20.04 和 20.10 提供了 RC/测试包。查看Kubic 项目页面 以获取支持的 Ubuntu 版本和架构组合列表。注:在sudo apt-get -y upgrade 可能需要在某些情况下,如果没有它就无法安装Podman。

注意:在 Ubuntu 20.10 和更新版本上,我们强烈建议您仅使用来自 Kubic 存储库或官方 Ubuntu 存储库的 Buildah、Podman 和 Skopeo。混合和匹配可能会导致不可预知的情况,包括安装冲突。

. /etc/os-release
echo “deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/xUbuntu_${VERSION_ID}/ /” | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:testing.list
curl -L “https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/xUbuntu_${VERSION_ID}/Release.key” | sudo apt-key add –
sudo apt-get update -qq
sudo apt-get -qq -y install podman
从头开始构建
构建和运行依赖
必需的

您应该尝试运行 Fedora、CentOS、RHEL 和相关发行版, make package-install这些发行版将安装依赖项、构建源代码、为当前平台生成 rpm 并最终安装它们。

sudo yum install -y \
btrfs-progs-devel \
conmon \
containernetworking-plugins \
containers-common \
crun \
device-mapper-devel \
git \
glib2-devel \
glibc-devel \
glibc-static \
go \
golang-github-cpuguy83-md2man \
gpgme-devel \
iptables \
libassuan-devel \
libgpg-error-devel \
libseccomp-devel \
libselinux-devel \
make \
pkgconfig
Debian、Ubuntu 和相关发行版:

sudo apt-get install \
btrfs-progs \
git \
golang-go \
go-md2man \
iptables \
libassuan-dev \
libbtrfs-dev \
libc6-dev \
libdevmapper-dev \
libglib2.0-dev \
libgpgme-dev \
libgpg-error-dev \
libprotobuf-dev \
libprotobuf-c-dev \
libseccomp-dev \
libselinux1-dev \
libsystemd-dev \
pkg-config \
runc \
uidmap
在 openSUSE Leap 15.x 和 Tumbleweed 上:

sudo zypper -n in libseccomp-devel libgpgme-devel
在 Manjaro(可能还有其他 Linux 发行版)上:

确保 Linux 内核支持用户命名空间:

> zgrep CONFIG_USER_NS /proc/config.gz
CONFIG_USER_NS=y

如果没有,请更新内核。对于 Manjaro Linux,可以在此处找到说明:https://wiki.manjaro.org/index.php/Manjaro_Kernels

之后启用用户命名空间:

sudo sysctl kernel.unprivileged_userns_clone=1
要永久启用用户命名空间:

echo ‘kernel.unprivileged_userns_clone=1′ > /etc/sysctl.d/userns.conf
构建缺失的依赖项
如果任何依赖项无法安装或不够最新,则必须从源代码构建它们。这将主要影响 Debian、Ubuntu 和相关发行版,或没有订阅处于活动状态的 RHEL(例如云虚拟机)。

高朗
仔细检查 golang 的版本是否足够新(即go version),是否支持 1.12.x 或更高版本。如果需要,可以在 https://golang.org/dl/ 上获得 golang 工具包。或者,go 可以从源代码构建,如下所示(保留 system-go 安装有助于避免引导 go:

export GOPATH=~/go
git clone https://go.googlesource.com/go $GOPATH
cd $GOPATH
git checkout tags/go1.12.17 # optional
cd src
./all.bash
export PATH=$GOPATH/bin:$PATH
普通
conmon预计将在系统上安装最新版本的。Conmon 用于监视 OCI 运行时。要从源代码构建,请使用以下命令:

git clone https://github.com/containers/conmon
cd conmon
export GOCACHE=”$(mktemp -d)”
make
sudo make podman
运行
runc预计将在系统上安装最新版本的。它被 Podman 选为默认运行时。版本 1.0.0-rc4 是最低要求,它已经在 Ubuntu 18.04 中可用。要仔细检查,runc –version应至少生成spec: 1.0.1,否则构建自己的:

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
CNI插件
设置 CNI 网络
cniREADME 中给出了设置 CNI 网络的正确描述。

CNI 网络的基本设置在安装或 make 过程中默认完成,无需进一步配置即可开始使用 Podman。

添加配置
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
可选套餐
Fedora、CentOS、RHEL 和相关发行版:

(无可选包)

Debian、Ubuntu 和相关发行版:

apt-get install -y \
libapparmor-dev
获取源代码
首先,确保go version首先在 $PATH 上找到的 高于 1.12.x。如果需要,上面的说明将帮助您编译更新版本的 Go。然后我们可以构建Podman:

git clone https://github.com/containers/podman/
cd podman
make BUILDTAGS=”selinux seccomp”
sudo make install PREFIX=/usr
构建标签
否则,如果您不想使用 seccomp 或 selinux 支持构建 Podman,您可以BUILDTAGS=””在运行 make 时添加。

make BUILDTAGS=””
sudo make install
Podman 支持可选的构建标签,用于编译支持各种功能。要将构建标记添加到 make 选项,BUILDTAGS必须设置变量,例如:

make BUILDTAGS=’seccomp apparmor’
构建标签 特征 依赖
服装店 服装支持 libapparmor
exclude_graphdriver_btrfs 排除 btrfs 库文件
exclude_graphdriver_devicemapper 排除设备映射器 库
libdm_no_deferred_remove 排除 libdm 中的延迟删除 库
赛康 系统调用过滤 libseccomp
linux系统 selinux 进程和挂载标签
系统 日志记录 库系统
请注意,Podman 不正式支持设备映射器。因此,该exclude_graphdriver_devicemapper标签是强制性的。

供应商 – 依赖管理
该项目使用go 模块进行依赖管理。如果 CI 抱怨拉取请求留下了不干净的状态,那么它很可能是正确的。更改依赖项后,请确保运行make vendor以将代码与 go 模块同步并重新填充./vendor目录。

静态构建
可以使用官方提供的nix 包及其在此存储库中的派生来构建 Podman 的静态链接二进制文件 。这些构建是完全可重现的,并将为glibc创建一个 x86_64/amd64 剥离的 ELF 二进制文件。

尼克斯
通过本地安装 nix 包管理器来构建二进制文件:

curl -L https://nixos.org/nix/install | sh
git clone https://github.com/containers/podman.git && cd podman
nix build -f nix/
./result/bin/podman –version
Ansible
一个Ansible角色也可以在其支持的操作系统自动执行上述静态链接文件的安装:

sudo su –
mkdir -p ~/.ansible/roles
cd ~/.ansible/roles
git clone https://github.com/alvistack/ansible-role-podman.git podman
cd ~/.ansible/roles/podman
pip3 install –upgrade –ignore-installed –requirement requirements.txt
molecule converge
molecule verify
配置文件
注册表.conf
手册页:registries.conf.5
/etc/containers/registries.conf

registries.conf 是配置文件,它指定在完成不包含注册表或域部分的映像名称时应咨询哪些容器注册表。

Fedoracontainers-common软件包中的 示例
$ cat /etc/containers/registries.conf
# For more information on this configuration file, see containers-registries.conf(5).
#
# NOTE: RISK OF USING UNQUALIFIED IMAGE NAMES
# We recommend always using fully qualified image names including the registry
# server (full dns name), namespace, image name, and tag
# (e.g., registry.redhat.io/ubi8/ubi:latest). Pulling by digest (i.e.,
# quay.io/repository/name@digest) further eliminates the ambiguity of tags.
# When using short names, there is always an inherent risk that the image being
# pulled could be spoofed. For example, a user wants to pull an image named
# `foobar` from a registry and expects it to come from myregistry.com. If
# myregistry.com is not first in the search list, an attacker could place a
# different `foobar` image at a registry earlier in the search list. The user
# would accidentally pull and run the attacker’s image and code rather than the
# intended content. We recommend only adding registries which are completely
# trusted (i.e., registries which don’t allow unknown or anonymous users to
# create accounts with arbitrary names). This will prevent an image from being
# spoofed, squatted or otherwise made insecure. If it is necessary to use one
# of these registries, it should be added at the end of the list.
#
# # An array of host[:port] registries to try when pulling an unqualified image, in order.
unqualified-search-registries = [“registry.fedoraproject.org”, “registry.access.redhat.com”, “docker.io”]
#
# [[registry]]
# # The “prefix” field is used to choose the relevant [[registry]] TOML table;
# # (only) the TOML table with the longest match for the input image name
# # (taking into account namespace/repo/tag/digest separators) is used.
# #
# # If the prefix field is missing, it defaults to be the same as the “location” field.
# prefix = “example.com/foo”
#
# # If true, unencrypted HTTP as well as TLS connections with untrusted
# # certificates are allowed.
# insecure = false
#
# # If true, pulling images with matching names is forbidden.
# blocked = false
#
# # The physical location of the “prefix”-rooted namespace.
# #
# # By default, this equal to “prefix” (in which case “prefix” can be omitted
# # and the [[registry]] TOML table can only specify “location”).
# #
# # Example: Given
# # prefix = “example.com/foo”
# # location = “internal-registry-for-example.net/bar”
# # requests for the image example.com/foo/myimage:latest will actually work with the
# # internal-registry-for-example.net/bar/myimage:latest image.
# location = internal-registry-for-example.com/bar”
#
# # (Possibly-partial) mirrors for the “prefix”-rooted namespace.
# #
# # The mirrors are attempted in the specified order; the first one that can be
# # contacted and contains the image will be used (and if none of the mirrors contains the image,
# # the primary location specified by the “registry.location” field, or using the unmodified
# # user-specified reference, is tried last).
# #
# # Each TOML table in the “mirror” array can contain the following fields, with the same semantics
# # as if specified in the [[registry]] TOML table directly:
# # – location
# # – insecure
# [[registry.mirror]]
# location = “example-mirror-0.local/mirror-for-foo”
# [[registry.mirror]]
# location = “example-mirror-1.local/mirrors/foo”
# insecure = true
# # Given the above, a pull of example.com/foo/image:latest will try:
# # 1. example-mirror-0.local/mirror-for-foo/image:latest
# # 2. example-mirror-1.local/mirrors/foo/image:latest
# # 3. internal-registry-for-example.net/bar/image:latest
# # in order, and use the first one that exists.
#
# short-name-mode=”enforcing”

[[registry]]
location=”localhost:5000″
insecure=true
安装文件
/usr/share/containers/mounts.conf 和可选 /etc/containers/mounts.conf

mounts.conf 文件指定在执行podman runorpodman build命令时自动挂载在容器内的卷挂载目录。然后容器进程可以使用此内容。卷装入内容不会提交到最终映像。

通常这些目录用于传递包软件访问远程包存储库所需的机密或凭据。

例如,带有“ /usr/share/rhel/secrets:/run/secrets”行的 mounts.conf ,/usr/share/rhel/secrets目录的内容被挂载在/run/secrets容器内部。此挂载点允许在容器内使用来自主机的 Red Hat Enterprise Linux 订阅。

请注意,这不是卷安装。卷的内容被复制到容器存储中,而不是直接从主机绑定挂载。

Fedoracontainers-common软件包中的示例:
cat /usr/share/containers/mounts.conf
/usr/share/rhel/secrets:/run/secrets
seccomp.json
/usr/share/containers/seccomp.json

seccomp.json 包含允许在容器内使用的 seccomp 规则的白名单。该文件通常由容器公共包提供。

上面的链接会将您带到 seccomp.json

策略文件
/etc/containers/policy.json

手册页:policy.json.5
Fedoracontainers-common软件包中的示例:
cat /etc/containers/policy.json
{
“default”: [
{
“type”: “insecureAcceptAnything”
}
],
“transports”:
{
“docker-daemon”:
{
“”: [{“type”:”insecureAcceptAnything”}]
}
}
}

--转载请注明: https://91o.cc/podman-%e5%ae%89%e8%a3%85%e8%af%b4%e6%98%8e/