当前位置: 首页 > article >正文

docker和containerd从TLS harbor拉取镜像

私有镜像仓库配置了自签名证书,https访问,好处是不需要处理免费证书和付费证书带来的证书文件变更,证书文件变更后需要重启服务,自签名证书需要将一套客户端证书存放在/etc/docker/cert.d目录下,或者/etc/containerd/certs.d下

一、docker和containerd配置Harbor TLS

docker和containerd都放在certs.d目录下

/etc/docker/certs.d/
├── harbor.devops.baga.life
│ ├── ca.crt
│ ├── harbor.devops.baga.life.cert
│ └──harbor.devops.baga.life.key

docker可以去login测试harbor的登录

docker login harbor.devops.baga.life -u 'robot$robot' -p 'xxxxxxx'

containerd不能直接登录harbor仓库,通过账号密码访问,配置在/etc/containerd/config.toml下

    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/certs.d"
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
          [plugins."io.containerd.grpc.v1.cri".registry.configs."sealos.hub:5000".auth]
            username = "admin"
            password = "passw0rd"
      [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.devops.baga.life".auth]
            username = "robot$robot"
            password = "xxxxxxx"

配置完成以后可以重启一下docker或者containerd

二、拉取测试

用ctr操作推送失败了,换个思路,我先在其他机器上用docker拉取镜像,打tag以后推送至镜像仓库。最后让ctr去进行拉取

1、docker拉取镜像
docker pull ubuntu
2、打tag
docker tag ubuntu:latest harbor.devops.baga.life/base/ubuntu:tmp
3、推送镜像
$ docker push harbor.devops.baga.life/base/ubuntu:tmp
The push refers to repository [harbor.devops.baga.life/base/ubuntu]
4b7c01ed0534: Pushed 
tmp: digest: sha256:104f82606ea66da00e6cfecbcccdb53ba4238a7057bed809f004107ad8e90c97 size: 529docker push 只会推送本地和远程不同的层,如果 harbor.devops.baga.life 已经有相同的镜像层,
	那么 Docker 只会推送元数据,实际数据不会重复上传。
	•	size: 529 代表的是 manifest 文件的大小,而不是整个镜像的大小。
4、拉取镜像
crictl pull harbor.devops.baga.life/base/ubuntu:tmp

三、不同点

首先是docker命令和ctr展示不同,containerd用了命名空间,默认default,但很多镜像存储在k8s.io中
可以通过crictl命令操作containerd,和docker操作方式类似,但无法给镜像打tag和推送,只能拉取

镜像大小不同

# 这是docker镜像大小
redis                                 latest    43724892d6db     7 weeks ago   117MB
# 这是containerd镜像大小
harbor.devops.baga.life/base/redis      tmp        43724892d6db0       45.9MB

可以看到镜像id相同,但是大小差了很多
差异主要原因如下:
1、Docker和CRI(容器运行时接口)报告大小的方式不同:

  • Docker通常显示镜像的"虚拟大小"(所有层的总和)
  • crictl/containerd通常显示镜像的"压缩大小"或者仅特定层的大小

2、共享层的计算方式:Docker可能将已有的共享层计入总大小,而crictl可能只计算唯一层。
3、虚拟大小与实际占用空间:117MB可能是镜像的"虚拟大小",而实际存储空间占用更小,约45.9MB。


http://www.kler.cn/a/565896.html

相关文章:

  • Linux的诞生:一场自由与协作的技术革命
  • CF 106B.Choosing Laptop(Java实现)
  • Kafka零拷贝
  • spark的一些指令
  • 嵌入式八股文,select、poll、epoll
  • python学习六
  • 处理DeepSeek返回的markdown文本
  • DeepSeek开源周第四弹!DeepSeek开源三剑客:训练效率的“时空魔术师”与“资源管家”全解析
  • LeetCode 热门100题-回文链表
  • DeepSeek开源周,第四弹再次来袭,优化并行策略
  • < 自用文儿 > Gobuster 暴力扫描工具与 SecLists 安全测试词表集合
  • 【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)
  • 【大语言模型,数据向量化】向量化时使用本地HuggingFaceEmbeddings失败,调用embeddings时仍会去Huggingface下载的解决方法
  • DeepSeek后训练:监督微调和强化学习
  • Spring Data JPA 中的分页实现:从 BasePage 到 Pageable
  • 网络流算法: 最大流算法
  • 【无标题】ABP更换MySql数据库
  • Wireshark:自定义类型帧解析
  • SpringSecurity踢出指定用户
  • 【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)