podman 修改仓库源
前言
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用(Windows 下也可以运行,不过个人还没测试)。Podman 提供与 Docker 非常相似的功能。它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
虽然目前容器化部署基本都采用 docker ,但是随着 RedHat 系列的 Linux 升级到 8 之后基本就采用 podman 作为自身的容器化产品之后,已经不能通过软件仓库安装 docker 了,虽然可以通过一些方法安装 docker ,但是个人还是比较喜欢使用 RedHat 系列,所以也就尝试使用 podman
Podman | Docker |
---|---|
是无守护进程的 | Docker 有一个守护进程 (containerd)。 docker CLI 与守护进程交互以管理容器。 |
直接通过 runc 与 Linux 内核交互 | 守护进程拥有所有运行容器的子进程 |
可以部署具有多个容器的 pod。 可以在 Kubernetes 中使用相同的 pod 清单。 此外,可以将 K8s pod 清单部署为 Podman pod。 |
Docker 中没有 pod 的概念 |
无需任何额外配置即可运行无根容器( rootless)。 可以使用 root 或非特权用户运行容器。 |
Docker 无根模式( rootless)需要额外的配置。 |
修改镜像源
Podman 可以直接通过软件源安装,使用命令大部分也和 docker 一样,这里就不再赘述。
Podman 有两种配置文件:
- 全局配置文件:
/etc/containers/registries.conf
- 用户配置文件:
~/.config/containers/registries.conf
可以直接修改全局配置文件,也可以在不同的用户下配置不同的参数,可能当前用户没有 containers 路径,可以新建配置文件之后修改
以修改全局配置文件为例:
1
2
sudo cp /etc/containers/registries.conf /etc/containers/registries.conf.bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
以上镜像源地址随着国内禁止访问 dockerhub 之后可能无法访问,需要自行搭建镜像源或者搜索其他人搭建的镜像源地址😂
- prefix 是 pull 的时候指定的镜像前缀,如果不指定 prefix 则默认和 location 一致。
- location 是获取镜像的地址;
- insecure=true 表示允许通过 HTTP 协议来获取镜像,对于私有化部署/内网测试环境下无 https 证书的环境来说很有帮助。
查看是否生效
1
2
podman info
Podman 常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
podman run #创建并启动容器
podman start #启动容器
podman ps #查看容器
podman stop #终止容器
podman restart #重启容器
podman attach #进入容器
podman exec #进入容器
podman export #导出容器
podman import #导入容器快照
podman rm #删除容器
podman logs #查看日志
podman search #检索镜像
podman pull #获取镜像
podman images #列出镜像
podman image Is #列出镜像
podman rmi #删除镜像
podman image rm #删除镜像
podman save #导出镜像
podman load #导入镜像
还能使用的镜像源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "hub-mirror.c.163.com"
insecure = true
[[registry.mirror]]
location = "hub.uuuadc.top"
insecure = true
[[registry.mirror]]
location = "docker.anyhub.us.kg"
insecure = true
[[registry.mirror]]
location = "dockerhub.jobcher.com"
insecure = true
[[registry.mirror]]
location = "dockerhub.icu"
insecure = true
[[registry.mirror]]
location = "docker.ckyl.me"
insecure = true
[[registry.mirror]]
location = "docker.awsl9527.cn"
insecure = true
总结
虽然 podman 目前看起来是 RedHat 未来主推的容器产品,但是使用 docker 的用户更多,很多业务并不一定会迁移到 podman 。
而且大部分容器都是根据 docker 构建的,即使 podman 描述说可以直接使用 docker 的绝大部分命令,不过有的在 docker 上正常运行的容器在 podman 上并不能正常使用,有可能在 pull 阶段就报错了。有些则是在启动阶段出现一些奇怪的错误,这些都是在使用 podman 时会遇到的问题。
如果使用 Redhat 系列的 Linux ,可以尝试使用 podman