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

2024-01-30 17:44

本文主要是介绍如何配置 Podman 使用国内镜像源?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Podman 配置国内镜像源

  • 什么是 Podman?
  • Docker 与 Podman 区别
  • 修改 Podman 容器注册表配置
    • 国内的镜像源
    • Podman Container Registries 修改步骤
    • 检查配置是否生效
  • 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 之间的区别,相关文件推荐:

  • 为什么说 Podman 是 Docker 的一个替代方案?

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 还被视为事实上的标准麽?欢迎各位小伙伴评论区留言。

这篇关于如何配置 Podman 使用国内镜像源?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661035

相关文章

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Oracle迁移PostgreSQL隐式类型转换配置指南

《Oracle迁移PostgreSQL隐式类型转换配置指南》Oracle迁移PostgreSQL时因类型差异易引发错误,需通过显式/隐式类型转换、转换关系管理及冲突处理解决,并配合验证测试确保数据一致... 目录一、问题背景二、解决方案1. 显式类型转换2. 隐式转换配置三、维护操作1. 转换关系管理2.

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址