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,速度快到我们感知不到,因为不会真实移动数据。但是在对象存储里面是没有这个概念的,在对象存储里面只有对象,对象只能被上传/删除/修改,没有移动的操作。由于这个问题我还没弄出来,主要是目前公有云的对象存储在这个问题上支持并不好,后期来补上这个细节问题。

运维小路

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

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

相关推荐
siriuuus2 分钟前
Linux MySQL 多实例部署与配置实践
linux·运维·mysql
郝学胜-神的一滴25 分钟前
深入解析Linux下的`lseek`函数:文件定位与操作的艺术
linux·运维·服务器·开发语言·c++·软件工程
冲上云霄的Jayden27 分钟前
ubuntu 22一步步 安装docker和配置使用国内源
linux·ubuntu·docker·国内源
迎風吹頭髮1 小时前
Linux服务器编程实践20-TCP服务 vs UDP服务:核心差异对比
linux·服务器·tcp/ip
ajassi20001 小时前
开源 Linux 服务器与中间件(二)嵌入式Linux服务器和中间件
linux·服务器·开源
ajassi20001 小时前
开源 Linux 服务器与中间件(一)基本介绍
linux·服务器·开源
赖small强1 小时前
深入理解 Linux NUMA:拓扑、分配策略与调优实践
linux·numa·pre-cpu·zone
javpy2 小时前
docker部署nacos报错 ‘env NACOS_AUTH_TOKEN must be set with Base64 String.‘
linux·docker·centos
Net_Walke2 小时前
【Linux系统】文件IO
linux·物联网·iot
刘某的Cloud2 小时前
ceph设置标志位
linux·运维·ceph·openstack