跳到主要内容

基于已更改的容器创建新镜像

摘要

podman commit [选项] 容器 [镜像名]

podman container commit [选项] 容器 [镜像名]

描述

podman commit 命令基于已更改的 容器 创建一个新的镜像。可以使用 --author 选项来设置镜像的作者。使用 --change 选项可以配置各种镜像指令,而 --message 选项则用于设置提交信息。在提交镜像时,容器 及其进程不会被暂停。如果不希望这样,可以将 --pause 选项设置为 true。提交完成后,Podman 会打印出新镜像的 ID。

如果 image 不以注册表名称组件开头,则会在名称中添加 localhost。 如果未提供 image,则创建的镜像的 REPOSITORYTAG 值将被设置为 <none>

选项

--author, -a=author

设置已提交镜像的作者。

--change, -c=instruction

将以下可能的指令应用于创建的镜像:

  • CMD
  • ENTRYPOINT
  • ENV
  • EXPOSE
  • LABEL
  • ONBUILD
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

可以多次设置。

--config=ConfigBlobFile

将指定文件中的容器配置合并到正在提交的镜像配置中。文件内容应该是 Schema2Config 结构的 JSON 编码版本,其定义位于docker_schema2

--format, -f=oci | docker

设置镜像清单和元数据的格式。目前支持的格式有 ocidocker。\ 默认格式为 oci

--iidfile=ImageIDfile

将镜像 ID 写入文件。

--include-volumes

在提交的镜像中包含通过 podman createpodman run 命令的 --volume--mount 选项添加到容器中的任何卷。\ 默认值为 false

--message, -m=message

为提交的镜像设置提交信息。\ 注意:message 字段在 oci 格式中不受支持。

--pause, -p

在创建镜像时暂停容器。\ 默认值为 false

--quiet, -q

禁止输出。\ 默认值为 false

--squash, -s

将新构建的层压缩成单个新层。\ 默认值为 false

示例

从容器创建镜像,并设置入口点和标签:

$ podman commit --change CMD=/bin/bash --change ENTRYPOINT=/bin/sh --change "LABEL blue=image" reverent_golick image-committed
Getting image source signatures
Copying blob sha256:b41deda5a2feb1f03a5c1bb38c598cbc12c9ccd675f438edc6acd815f7585b86
25.80 MB / 25.80 MB [======================================================] 0s
Copying config sha256:c16a6d30f3782288ec4e7521c754acc29d37155629cb39149756f486dae2d4cd
448 B / 448 B [============================================================] 0s
Writing manifest to image destination
Storing signatures
e3ce4d93051ceea088d1c242624d659be32cf1667ef62f1d16d6b60193e2c7a8

在这个示例中,我们使用 podman commit 命令从一个名为 reverent_golick 的容器创建一个新的镜像,名为 image-committed。我们还使用 --change 选项来修改新镜像的 CMD、ENTRYPOINT 和添加了一个标签 blue=image。命令执行完成后,会打印出新镜像的 ID。

从容器创建镜像时添加提交消息:

$ podman commit -q --message "committing container to image" reverent_golick image-committed
e3ce4d93051ceea088d1c242624d659be32cf1667ef62f1d16d6b60193e2c7a8

从容器创建镜像时添加作者信息:

$ podman commit -q --author "firstName lastName" reverent_golick image-committed
e3ce4d93051ceea088d1c242624d659be32cf1667ef62f1d16d6b60193e2c7a8

在创建镜像时暂停正在运行的容器:

$ podman commit -q --pause=true containerID image-committed
e3ce4d93051ceea088d1c242624d659be32cf1667ef62f1d16d6b60193e2c7a8

使用默认镜像标签从容器创建镜像:

$ podman commit containerID image-committed
e3ce4d93051ceea088d1c242624d659be32cf1667ef62f1d16d6b60193e2c7a8

使用默认所需功能从容器创建镜像:

$ podman commit -q --change "LABEL io.containers.capabilities=setuid,setgid" epic_nobel privimage
400d31a3f36dca751435e80a0e16da4859beb51ff84670ce6bdc5edb30b94066

在这个示例中,我们使用 podman commit 命令从名为 reverent_golick 的容器创建了一个新的镜像,并添加了提交消息。我们还展示了如何为镜像添加作者信息,以及在创建镜像时暂停正在运行的容器。此外,我们还展示了如何使用默认标签创建镜像,并添加了所需的 io.containers.capabilities 标签,以限制镜像在运行时可以使用的功能。

参见

podman(1), podman-run(1), podman-create(1)

这些手册页提供了关于 podman 及其子命令的更多详细信息。podman 是一个用于管理容器和镜像的工具,类似于 Docker,但它是无守护进程的,并且与 Podman 项目和 libpod 库紧密相关。

  • podman(1): 这是 podman 的主手册页,提供了关于该工具的一般信息和可用子命令的概述。
  • podman-run(1): 这个手册页详细描述了 podman run 命令,该命令用于从指定的镜像启动一个新的容器。
  • podman-create(1): 这个手册页描述了 podman create 命令,它用于创建新的容器,但并不立即启动它。

历史

2017年12月,最初由Urvashi Mohnani编译整理。

这个历史部分记录了 podman 或相关文档最初创建或编译的日期和贡献者。随着项目的发展,这个日期和贡献者列表可能会发生变化,并且可以在项目的源代码存储库或相关文档中找到更详细的版本历史。