如何配置 Podman 使用国内镜像源?

什么是 Podman?

Podman 是一种符合 OCI 标准的容器管理工具,它提供与 Docker 类似的功能来管理容器。

特别是在容器安全方面(相对于 Docker 容器工具),podmanrootless containers 特性在一定程度上避免了容器安全问题。

举个例子:

  • 假如 Linux 系统中有两个用户,分别是 user-auser-b,当 user-a 使用 podman 创建一个容器 container-a ,此时创建的容器 container-a 不能被 user-b 用户来修改,反之亦然。

Podman 的最佳特性之一是它能够运行 rootless containersrootless containers 是在没有 root 权限(普通用户)的情况下运行和管理容器的概念。从安全的角度来看,无根容器通过不允许根访问添加了额外的安全层,即使容器被攻击者破坏也是如此。

Podman 也是无守护进程的(与 docker 不同),这意味着它没有守护进程并直接与 runc 交互(运行基于 OCI 规范的容器)。

Podman 的另一个有趣且高级的功能是在 Pod 中运行容器。与 Kubernetes pod 类似,您可以使用 Podman 在本地创建多容器 Pod。您可以将 podman pod 导出为 Kubernetes 清单,并使用 Kubernetes pod 清单来部署和运行 podman pod

关于 Docker 和 Podman 之间的区别,相关文件推荐:

Docker 与 Podman 区别

Podman 提供了类似 Docker 管理容器的功能,下面列举下它们两者的区别:

PodmanDocker
Podman 是无守护进程的Docker 有一个守护进程 (containerd)。docker CLI 与守护进程交互以管理容器。
Podman 直接通过 runcLinux 内核交互Docker 守护进程拥有所有运行容器的子进程
Podman 可以部署具有多个容器的 pod。可以在 Kubernetes 中使用相同的 pod 清单。此外,您可以将 K8s pod 清单部署为 Podman podDocker 中没有 pod 的概念
无需任何额外配置即可运行无根容器( rootless)。您可以使用 root 或非特权用户运行容器。Docker 无根模式( rootless)需要额外的配置。

修改 Podman 容器注册表配置

双击 Podman Desktop 图标,打开 GUI 工具,点击左下角的设置【Settings】选择【Registries】:

podman-desktop-settings-registries

如上图所示,默认情况下,podman 配置有 4 个容器注册表:

  • Docker Hubhttps://docker.io
  • Red Hat Quayhttps://quay.io
  • GitHubhttps://ghcr.io
  • Google Container Registryhttps://gcr.io

您可以在以下文件中找到默认的 Podman 容器注册表配置文件 registries.conf

  • 全局配置文件:/etc/containers/registries.conf
  • 用户配置文件:~/.config/containers/registries.conf

您可以向此配置添加自定义或私有容器注册表。例如,google 容器注册表、AWS ECR、自托管私有注册表等。

如果你想使用注册中心的其他私有容器镜像,你可以使用命令登录到注册中心 podman

例如,要登录到 docker hub

podman login docker.io

登录后,您将能够使用 podman 命令从 docker hub 中拉取容器镜像。

如果您希望为特定用户提供不同的注册表配置,您可以 registries.conf 在用户目录中创建单独的容器注册表信息。

$HOME/.config/containers/registries.conf

国内直接用 podman pull 拉取镜像会很慢(可能拉取失败),所以需要配置国内镜像源来加速访问。

国内的镜像源

国内的镜像源(镜像站)加速地址有:

  • 阿里云(需登录,免费),http://<你的ID>.mirror.aliyuncs.com
  • 网易,http://hub-mirror.c.163.com
  • 百度,https://mirror.baidubce.com
  • 上海交大,https://docker.mirrors.sjtug.sjtu.edu.cn
  • 南京大学,https://docker.nju.edu.cn

以下连接不公开或已失效:

  1. Docker 中国官方镜像(已关闭),https://registry.docker-cn.com
  2. 中国科技大学 USTC(仅供内部访问),https://docker.mirrors.ustc.edu.cn

Podman Container Registries 修改步骤

此处我们以全局配置文件方式修改容器注册表配置文件 registries.conf

  1. 配置文件在 podman machine 虚拟机中,连接该虚拟机并打开一个终端:
 podman machine ssh [optional-machine-name]
  1. 备份原文件
sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.bak
  1. 查看文件
sudo cat /etc/containers/registries.conf

输出类似(单个镜像源)配置信息如下:

# 取消从默认地址搜索的仓库域名
unqualified-search-registries = ["docker.io"]

# 自定义搜索器
[[registry]]
# 仓库前缀(镜像前缀)
prefix = "docker.io"
# 加速器地址,此处配置的 docker 中国区源
location = "registry.docker-cn.com"
# 允许通过 http 协议获取镜像
insecure = true

配置说明:

  • prefixpull 的时候指定的镜像前缀,如果不指定 prefix 则默认和 location 一致。
  • location 是获取镜像的地址;
  • insecure=true 表示允许通过 HTTP 协议来获取镜像,对于私有化部署/内网测试环境下无 https 证书的环境来说很有帮助。
  1. 编辑文件
sudo vim /etc/containers/registries.conf

配置多个镜像源:

unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "hub-mirror.c.163.com"
insecure = true

[[registry.mirror]]
# 百度镜像源
location = "mirror.baidubce.com"
insecure = true
[[registry.mirror]]
# 网易 163 镜像源
location = "hub-mirror.c.163.com"
insecure = true
[[registry.mirror]]
# 上海交大镜像源
location = "docker.mirrors.sjtug.sjtu.edu.cn"
insecure = true
[[registry.mirror]]
# 南京大学镜像源
location = "docker.nju.edu.cn"
insecure = true

退出并保存:

:wq!

使用 shell 脚本配置:

#!/bin/bash
[ -e /etc/containers/registries.conf.BackupDir ] || mkdir /etc/containers/registries.conf.BackupDir
sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.BackupDir/registries.conf.`date "+%Y%m%d%H%M%S"`.bak
printf '
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "hub-mirror.c.163.com"
insecure = true

[[registry.mirror]]
location = "mirror.baidubce.com"
insecure = true
[[registry.mirror]]
location = "hub-mirror.c.163.com"
insecure = true
[[registry.mirror]]
location = "docker.mirrors.sjtug.sjtu.edu.cn"
insecure = true
[[registry.mirror]]
location = "docker.nju.edu.cn"
insecure = true
' | sudo tee /etc/containers/registries.conf

检查配置是否生效

  1. 配置完成后,查看 podman 信息:
podman info
  1. 运行容器测试:
podman run --name=hello-world hello-world

Podman 容器存储

每个系统用户都有自己的容器存储。这意味着,如果您尝试从不同的用户登录中提取 image,它会从远程注册表(registries.conf)中提取 image 而不是本地 image

例如:

  • 对于 root 用户,容器存储在 /var/lib/containers/storage 目录中;
  • 对于其他用户,容器存储在 $HOME/.local/share/containers/storage/ 目录中;

总结

通过配置 Podman 的国内镜像加速站,我们又可以继续愉快的体验 Podman 管理容器的各项功能了。查看 podman 更多帮助信息,输入 podman -h

在这里思考一个问题,随着 Podman 的崛起,在容器方面,Docker 还被视为事实上的标准麽?欢迎各位小伙伴评论区留言。

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值