Docker-番外篇之上传镜像

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇(本小节属于)

上一小节我们介绍了docker在下载镜像的时候做了什么,今天我们讲讲在docker上传的时候做了什么。

本小节的知识,如果是本地存储,在实际运维中并没有什么用。但是如果你使仓库是的是对象存储,理解这个逻辑就是很有用的,这个也是生产经验。

我们在运行docker仓库的时候,是做了持久化的数据的,我们现在去看看持久化目录里面的内容是什么?

csharp 复制代码
#容器内执行,未上传镜像的时候里面内容都是空的
/ # cd /var/lib/registry/
/var/lib/registry # ls
/var/lib/registry # 

#上传一个镜像
[root@localhost ~]# docker push 192.168.31.205:5000/centos:7
The push refers to a repository [192.168.31.205:5000/centos]
174f56854903: Pushed 
7: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529

#宿主机执行,上传完成一个镜像的目录情况,
[root@localhost opt]# tree -L 5
.
└── docker
    └── registry
        └── v2
            ├── blobs
            │   └── sha256
            └── repositories
                └── centos

7 directories, 0 files

blobs :用于实际存储镜像文件,实际hash打散的二进制文件。当然下图是存在 很多镜像才会出现的这么多目录。

repositories :镜像的元数据目录,第一层目录镜像名字或者目录。当前只有centos是因为只有一个centos镜像,如果有多个镜像,则会出现多个目录。如果是多层目录,则下面还有曾经目录。centos目录下的其他目录包括_layers信息,_manifests信息元数据,而_upload则是上传的临时目录。

csharp 复制代码
[root@localhost opt]# cd docker/registry/v2/repositories/
[root@localhost repositories]# ls
centos
[root@localhost repositories]# cd centos/
[root@localhost centos]# ls
_layers  _manifests  _uploads
[root@localhost centos]# 

上图上传镜像的过程中,数据在_upload目录,上传完成以后数据到了blobs目录。

下图是上传过程中的临时目录,最后消失的目录情况。

这个数据目录转换的过程其实就是使用对象存储容易出现问题的地方。因为在Linux分区里面,移动文件或者目录,实际上只是改变一个inode,速度快到我们感知不到,因为不会真实移动数据。但是在对象存储里面是没有这个概念的,在对象存储里面只有对象,对象只能被上传/删除/修改,没有移动的操作。由于这个问题我还没弄出来,主要是目前公有云的对象存储在这个问题上支持并不好,后期来补上这个细节问题。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
!!!5254 小时前
华为云镜像加速器
docker·容器·华为云
技术小齐4 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风4 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
打不了嗝 ᥬ᭄4 小时前
Linux的权限
linux
落幕4 小时前
C语言-进程
linux·运维·服务器
深度Linux4 小时前
C++程序员内功修炼——Linux C/C++编程技术汇总
linux·项目实战·c/c++
chenbin5205 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯5 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹5 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
风静如云6 小时前
OpenBMC:BmcWeb定义service
linux