本文主要是介绍如何配置 Podman 使用国内镜像源?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Podman 配置国内镜像源
- 什么是 Podman?
- Docker 与 Podman 区别
- 修改 Podman 容器注册表配置
- 国内的镜像源
- Podman Container Registries 修改步骤
- 检查配置是否生效
- Podman 容器存储
- 总结
什么是 Podman?
Podman
是一种符合OCI
标准的容器管理工具,它提供与Docker
类似的功能来管理容器。
特别是在容器安全方面(相对于 Docker
容器工具),podman
的 rootless containers
特性在一定程度上避免了容器安全问题。
举个例子:
- 假如
Linux
系统中有两个用户,分别是user-a
和user-b
,当user-a
使用podman
创建一个容器container-a
,此时创建的容器container-a
不能被user-b
用户来修改,反之亦然。
Podman
的最佳特性之一是它能够运行 rootless containers
。rootless containers
是在没有 root
权限(普通用户)的情况下运行和管理容器的概念。从安全的角度来看,无根容器通过不允许根访问添加了额外的安全层,即使容器被攻击者破坏也是如此。
Podman
也是无守护进程的(与 docker
不同),这意味着它没有守护进程并直接与 runc
交互(运行基于 OCI
规范的容器)。
Podman
的另一个有趣且高级的功能是在 Pod
中运行容器。与 Kubernetes pod
类似,您可以使用 Podman
在本地创建多容器 Pod
。您可以将 podman pod
导出为 Kubernetes
清单,并使用 Kubernetes pod
清单来部署和运行 podman pod
。
关于 Docker 和 Podman 之间的区别,相关文件推荐:
- 为什么说 Podman 是 Docker 的一个替代方案?
Docker 与 Podman 区别
Podman
提供了类似 Docker
管理容器的功能,下面列举下它们两者的区别:
Podman | Docker |
---|---|
Podman 是无守护进程的 | Docker 有一个守护进程 (containerd )。docker CLI 与守护进程交互以管理容器。 |
Podman 直接通过 runc 与 Linux 内核交互 | Docker 守护进程拥有所有运行容器的子进程 |
Podman 可以部署具有多个容器的 pod 。可以在 Kubernetes 中使用相同的 pod 清单。此外,您可以将 K8s pod 清单部署为 Podman pod 。 | Docker 中没有 pod 的概念 |
无需任何额外配置即可运行无根容器( rootless )。您可以使用 root 或非特权用户运行容器。 | Docker 无根模式( rootless )需要额外的配置。 |
修改 Podman 容器注册表配置
双击 Podman Desktop
图标,打开 GUI
工具,点击左下角的设置【Settings
】选择【Registries
】:
如上图所示,默认情况下,podman
配置有 4
个容器注册表:
- Docker Hub,
https://docker.io
- Red Hat Quay,
https://quay.io
- GitHub,
https://ghcr.io
- Google Container Registry,
https://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
以下连接不公开或已失效:
Docker
中国官方镜像(已关闭),https://registry.docker-cn.com
- 中国科技大学
USTC
(仅供内部访问),https://docker.mirrors.ustc.edu.cn
Podman Container Registries 修改步骤
此处我们以全局配置文件方式修改容器注册表配置文件 registries.conf
。
- 配置文件在
podman machine
虚拟机中,连接该虚拟机并打开一个终端:
podman machine ssh [optional-machine-name]
- 备份原文件
sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.bak
- 查看文件
sudo cat /etc/containers/registries.conf
输出类似(单个镜像源)配置信息如下:
# 取消从默认地址搜索的仓库域名
unqualified-search-registries = ["docker.io"]# 自定义搜索器
[[registry]]
# 仓库前缀(镜像前缀)
prefix = "docker.io"
# 加速器地址,此处配置的 docker 中国区源
location = "registry.docker-cn.com"
# 允许通过 http 协议获取镜像
insecure = true
配置说明:
prefix
是pull
的时候指定的镜像前缀,如果不指定prefix
则默认和location
一致。location
是获取镜像的地址;insecure=true
表示允许通过HTTP
协议来获取镜像,对于私有化部署/内网测试环境下无https
证书的环境来说很有帮助。
- 编辑文件
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
检查配置是否生效
- 配置完成后,查看
podman
信息:
podman info
- 运行容器测试:
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
还被视为事实上的标准麽?欢迎各位小伙伴评论区留言。
这篇关于如何配置 Podman 使用国内镜像源?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!