如何配置 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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1