名称

podman-container-clone - 创建现有容器的副本

概要

podman container clone [选项] 容器 名称 镜像

描述

podman container clone 创建容器的副本,并使用相同的配置重新创建原始容器。此命令接受三个参数:第一个是克隆的容器 ID 或名称,第二个参数可以更改克隆的名称,默认情况下为 $ORIGINAL_NAME-clone,第三个参数是克隆容器中要使用的新的镜像。

选项

--blkio-weight=权重

块 IO 相对权重。权重 是介于 101000 之间的数值。

此选项在 cgroups V1 无根系统上不支持。

--blkio-weight-device=设备:权重

块 IO 相对设备权重。

--cpu-period=限制

设置完全公平调度程序 (CFS) 的 CPU 周期,以微秒为单位。一旦容器的 CPU 配额用完,它将不会被调度运行,直到当前周期结束。默认为 100000 微秒。

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

如果没有指定,将使用原始容器的 CPU 周期

--cpu-quota=限制

限制 CPU 完全公平调度程序 (CFS) 配额。

限制容器的 CPU 使用率。默认情况下,容器使用完整的 CPU 资源。限制是以微秒为单位的数值。如果提供了数值,则允许容器使用该数量的 CPU 时间,直到 CPU 周期结束(可以通过 --cpu-period 控制)。

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

如果没有指定,将使用原始容器的 CPU 配额。

--cpu-rt-period=微秒

以微秒为单位限制 CPU 实时周期。

限制容器的实时 CPU 使用率。此选项告诉内核将容器的实时 CPU 使用率限制为指定的周期。

此选项仅在 cgroups V1 有根系统上支持。

如果没有指定,将使用原始容器的 CPU 运行时周期。

--cpu-rt-runtime=微秒

以微秒为单位限制 CPU 实时运行时。

限制容器的实时 CPU 使用率。此选项告诉内核限制给定 CPU 周期内实时任务可以消耗的时间量。例如:周期为 1,000,000us,运行时为 950,000us,这意味着此容器可以消耗 95% 的可用 CPU,并将剩余的 5% 留给普通优先级任务。

所有容器的运行时总和不能超过分配给父 cgroup 的数量。

此选项仅在 cgroups V1 有根系统上支持。

--cpu-shares, -c=份额

CPU 份额(相对权重)。

默认情况下,所有容器都获得相同比例的 CPU 周期。可以通过更改容器的 CPU 份额权重(相对于所有正在运行的容器的总权重)来修改此比例。默认权重为 1024

此比例仅在 CPU 密集型进程正在运行时适用。当一个容器中的任务处于空闲状态时,其他容器可以使用剩余的 CPU 时间。实际的 CPU 时间量会根据系统上运行的容器数量而异。

例如,考虑三个容器,一个容器的 cpu-share 为 1024,另外两个容器的 cpu-share 设置为 512。当三个容器中的进程都尝试使用 100% 的 CPU 时,第一个容器将获得总 CPU 时间的 50%。如果添加第四个容器,其 cpu-share 为 1024,则第一个容器只获得 33% 的 CPU。剩余的容器分别获得 16.5%、16.5% 和 33% 的 CPU。

在多核系统上,CPU 时间份额将分布到所有 CPU 内核。即使容器被限制在不到 100% 的 CPU 时间,它也可以使用每个单独 CPU 内核的 100%。

例如,考虑一个拥有三个以上内核的系统。如果容器 C0 启动时使用 --cpu-shares=512 运行一个进程,另一个容器 C1 使用 --cpu-shares=1024 运行两个进程,这可能会导致 CPU 份额的以下划分

PID

容器

CPU

CPU 份额

100

C0

0

CPU0 的 100%

101

C1

1

CPU1 的 100%

102

C1

2

CPU2 的 100%

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

如果没有指定,将使用原始容器的 CPU 份额。

--cpus

为容器设置 CPU 数量,该数量将覆盖原始容器的 CPU 限制。如果没有指定,将使用原始容器的纳米 CPU。

这是 --cpu-period--cpu-quota 的简写,因此只能设置 --cpus--cpu-period--cpu-quota 选项中的任一个。

此选项在 cgroups V1 无根系统上不支持。

--cpuset-cpus=数量

允许执行的 CPU。可以指定为逗号分隔的列表(例如 0,1)、范围(例如 0-3)或任何组合(例如 0-3,7,11-15)。

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

如果没有指定,将使用原始容器的 CPU 集。

--cpuset-mems=节点

允许执行的内存节点 (MEM)(0-3、0、1)。仅在 NUMA 系统上有效。

如果系统上有四个内存节点(0-3),使用 --cpuset-mems=0,1,则容器中的进程只使用前两个内存节点的内存。

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

如果没有指定,将使用原始容器的 CPU 内存节点。

--destroy

删除我们正在克隆的原始容器,以便在使用后模拟配置。

--device-read-bps=路径:速率

限制从设备读取的速率(以每秒字节为单位)(例如 --device-read-bps=/dev/sda:1mb)。

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

--device-write-bps=路径:速率

限制写入设备的速率(以每秒字节为单位)(例如 --device-write-bps=/dev/sda:1mb)。

在某些系统上,对于非 root 用户,可能不允许更改资源限制。有关更多详细信息,请参阅 https://github.com/containers/podman/blob/main/troubleshooting.md#26-running-containers-with-resource-limits-fails-with-a-permissions-error

此选项在 cgroups V1 无根系统上不支持。

--force, -f

强制删除我们正在克隆的原始容器。只能与 --destroy 结合使用。

--memory, -m=数量[单位]

内存限制。单位 可以是 b(字节)、k(千字节)、m(兆字节)或 g(吉字节)。

允许限制容器可用的内存。如果主机支持交换内存,则 -m 内存设置可以大于物理 RAM。如果指定了 0 的限制(不使用 -m),则容器的内存不受限制。实际限制可能会向上取整到操作系统页大小的倍数(该值非常大,达到数百万兆)。

此选项在 cgroups V1 无根系统上不支持。

如果没有指定内存限制,将使用原始容器的内存限制。

--memory-reservation=数量[单位]

内存软限制。单位 可以是 b(字节)、k(千字节)、m(兆字节)或 g(吉字节)。

设置内存保留后,当系统检测到内存竞争或内存不足时,会强制容器将其消耗限制在其保留范围内。因此,始终将该值设置为低于 --memory,否则硬限制将优先。默认情况下,内存保留与内存限制相同。

此选项在 cgroups V1 无根系统上不支持。

如果未指定,则内存保留与克隆容器的内存限制相同。

--memory-swap=数量[单位]

等于内存加交换空间的限制值。单位 可以是 b(字节)、k(千字节)、m(兆字节)或 g(吉字节)。

必须与 -m--memory)标志一起使用。参数值必须大于 -m--memory)的值。默认情况下,它设置为 --memory 值的两倍。

数量 设置为 -1 以启用无限交换空间。

此选项在 cgroups V1 无根系统上不支持。

如果未指定,则将使用克隆容器来推导出交换空间值。

--memory-swappiness=数量

调整容器的内存交换行为。接受介于 0100 之间的整数。

此标志仅在 cgroups V1 有根系统上支持。

--name

为克隆的容器设置自定义名称。如果没有指定,默认情况下为以下语法:<ORIGINAL_NAME>-clone

--pod=名称

在现有 Pod 中克隆容器。这有助于将容器移动到现有 Pod。容器将加入 Pod 共享命名空间,从而丢失与共享命名空间冲突的配置。

--run

当设置为 true 时,此标志将在克隆过程完成后运行新创建的容器,这指定了分离的运行模式。

示例

将指定的容器克隆到一个新的容器

# podman container clone d0cf1f782e2ed67e8c0050ff92df865a039186237a4df24d7acba5b1fa8cc6e7
6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584

将指定的容器克隆到一个新命名的容器

# podman container clone --name=clone d0cf1f782e2ed67e8c0050ff92df865a039186237a4df24d7acba5b1fa8cc6e7
6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584

将指定的容器替换为选定的资源约束,并将其克隆到一个新的容器,并删除原始容器

# podman container clone --destroy --cpus=5 d0cf1f782e2ed67e8c0050ff92df865a039186237a4df24d7acba5b1fa8cc6e7
6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584

克隆指定的容器,并赋予新的名称,然后用指定的镜像名称替换原始容器的镜像。

# podman container clone 2d4d4fca7219b4437e0d74fcdc272c4f031426a6eacd207372691207079551de new_name fedora
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull registry.fedoraproject.org/fedora:latest...
Getting image source signatures
Copying blob c6183d119aa8 done
Copying config e417cd49a8 done
Writing manifest to image destination
Storing signatures
5a9b7851013d326aa4ac4565726765901b3ecc01fcbc0f237bc7fd95588a24f9

参见

podman-create(1), cgroups(7)

历史

2022 年 1 月,由 Charlie Doern 编写 cdoern@redhat.com