Podman 教程

Podman 将镜像推送到仓库

在 Podman 中,可以使用 podman push 命令将本地镜像推送到远程仓库或者私库中,实现镜像的共享、分发、版本管理和跨环境部署。

为什么要将镜像推送到仓库?主要原因如下:

(1) 跨环境复用:本地构建的镜像可推送到仓库,在服务器、测试环境、生产环境等不同机器上直接拉取使用,无需重复构建。

(2)团队协作共享:团队成员可通过仓库获取统一版本的镜像,避免因本地环境差异导致的“我这能跑”问题。

(3)版本管控:仓库会记录镜像的不同标签(如 v1.0、v2.0),可回溯历史版本,便于迭代和回滚。

(4)支持部署自动化:CI/CD 流水线(如 Jenkins、GitLab CI)可直接从仓库拉取镜像,实现自动化测试、构建和部署。

(5)节省本地资源:无需在多台机器上重复存储镜像文件,仓库集中托管,降低存储成本。


基础语法

podman push 的基本格式如下:

podman push [选项] 镜像名称[:标签|@摘要] [目标位置]

参数说明:

  • 镜像名称:可以是本地镜像名、镜像 ID,或带仓库地址的完整镜像名。

  • 目标位置:通常是仓库地址 + 镜像名 + 标签(若省略,会沿用本地镜像的标签)。

常用选项:

  • --tls-verify=true|false   控制是否验证仓库的 TLS 证书。推送至使用自签名证书或 HTTP 协议的私有仓库时,需设为 false。例如:podman push --tls-verify=false your-registry:5000/myapp:latest

  • --format=FORMAT   指定镜像传输格式,常用值为 docker(默认)或 oci。例如:podman push --format=oci myapp:latest docker.io/yourname/myapp:latest

  • --remove-signatures    推送时移除镜像的签名信息(若镜像已签名),例如:podman push --remove-signatures myapp:latest quay.io/yourname/myapp:latest

  • --quiet, -q   静默模式,仅输出必要信息,减少日志干扰。

  • --authfile=PATH  指定身份验证文件路径(默认路径为 $XDG_RUNTIME_DIR/containers/auth.json),例如:podman push --authfile=/path/to/my/auth.json myapp:latest docker.io/yourname/myapp:latest

  • --creds=USERNAME:PASSWORD  直接指定仓库的用户名和密码(不推荐在命令行使用,避免密码泄露),例如:podman push --creds=myuser:mypass myapp:latest docker.io/yourname/myapp:latest

点击查看 podman push 命令手册

  

常用示例

准备工作

下面演示将使用腾讯云免费的容器镜像服务 TCR(https://console.cloud.tencent.com/tcr/repository),如下图:

Podman 将镜像推送到仓库

个人账户,免费拥有 10 个命名空间,500 个仓库数量的额度。命名空间可以简单理解为目录/分类,仓库这是我们具体的镜像,如 hxstrive.com 命名空间下面存在 mysql、redis、mongodb 三个仓库,而 mysql、redis、mongodb 又存在多个版本,如下图:

hxstrive.com
  ├── mysql
  │   ├── 5.7
  │   └── 8.0
  ├── mongodb
  │   └── latest
  └── redis
      ├── 5.0
      ├── 7.0
      └── latest

点击左边菜单栏“镜像仓库”,然后创建一个名为 myapp 的镜像仓库,如下图:

Podman 将镜像推送到仓库

点击 myapp 镜像仓库的“快捷指令”按钮显示 docker 的操作指令,podman 类似,只需将 docker 改为 podman 即可。如下图:

Podman 将镜像推送到仓库

下面将根据上图的内容进行操作。

登录到镜像仓库

登录到目标镜像仓库,例如:

C:\Users\Administrator> podman login ccr.ccs.tencentyun.com --username=100009324115
Password:					# 在这里输入密码,输入密码没有反馈字符,为了安全
Login Succeeded!

上述提示,登录成功了。

标记(Tag)你的镜像

在推送之前,你需要确保镜像的标签符合仓库的命名规范,格式通常为:

[仓库地址]/[用户名]/[镜像名]:[标签]

下面是腾讯给出的格式:

podman tag [imageId] ccr.ccs.tencentyun.com/hxstrive.com/myapp:[tag]

说明:将 [imageId] 替换成你自己的镜像 ID 或名称,[tag] 替换为你的版本信息,如 v1.0 等。

例如:

# 查看本地的镜像
C:\Users\Administrator> podman images
REPOSITORY               TAG         IMAGE ID      CREATED       SIZE
localhost/my-nginx       latest      60adc2e137e7  29 hours ago  155 MB
docker.io/library/nginx  latest      60adc2e137e7  29 hours ago  155 MB

# 为镜像 nginx 打标签
C:\Users\Administrator> podman tag nginx ccr.ccs.tencentyun.com/hxstrive.com/myapp:v1.0

# 查看达标后的镜像
C:\Users\Administrator> podman images
REPOSITORY                                 TAG         IMAGE ID      CREATED       SIZE
ccr.ccs.tencentyun.com/hxstrive.com/myapp  v1.0        60adc2e137e7  29 hours ago  155 MB
localhost/my-nginx                         latest      60adc2e137e7  29 hours ago  155 MB
docker.io/library/nginx                    latest      60adc2e137e7  29 hours ago  155 MB

推送镜像

使用 podman push 命令推送标记好的镜像:

C:\Users\Administrator> podman push ccr.ccs.tencentyun.com/hxstrive.com/myapp:v1.0
Getting image source signatures
Copying blob sha256:388bb4cadb9eb18529d3f466855a783f38c821571bc180fec9d0663fef1d0322
Copying blob sha256:008ba900efa19180f53a0ed13fc6feb7d2d34bad25a839702024f87c5122568a
Copying blob sha256:fe0771a36433cf0ef9f598e1f0b526520fa60c732d969e67bc6dd38f01bebf40
Copying blob sha256:5f0d4d15245b8979efd5be5e1726e44dd6461c32c2fa193b15228e591f1d2442
Copying blob sha256:70a290c5e58b68f39496ab93a62f21b8b2ca0502e97905131838de1b39a37cbb
Copying blob sha256:1e79db1a7c1e2dc46e0cb975b22d67695877d42318a3598d01f322df3078c43d
Copying blob sha256:38d44e06fd0163071bcf2eeff92083e9420f4fb17c32fb5c4af71b75e0e91eaa
Copying config sha256:60adc2e137e757418d4d771822fa3b3f5d3b4ad58ef2385d200c9ee78375b6d5
Writing manifest to image destination

再回到腾讯 TCR 镜像仓库界面,点击 myapp 仓库查看版本信息,如下图:

Podman 将镜像推送到仓库

上图多了一个 v1.0 的镜像版本信息,到这里推送就成功了。

登出仓库(可选)

注意,完成推送后,可以选择登出,避免被人利用,任意推送镜像。

C:\Users\Administrator> podman logout ccr.ccs.tencentyun.com
Removed login credentials for ccr.ccs.tencentyun.com

遵循以上步骤,你就可以顺利地将 Podman 管理的镜像推送到任何兼容的容器仓库了。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号