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

运维小路

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

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

相关推荐
花小璇学linux5 小时前
imx6ull-驱动开发篇42——Linux I2C 驱动框架简介
linux·驱动开发·嵌入式软件
凌肖战5 小时前
编写Linux下设备驱动时两种方案:内核态驱动开发和用户态驱动开发
linux·驱动开发
Wy_编程8 小时前
VS中创建Linux项目
linux
luck_lin8 小时前
linux添加新硬盘挂载分区和数据迁移
linux·运维·分区扩容
四时久成8 小时前
服务器认证系统
运维·服务器
iFulling8 小时前
【云原生】CentOS安装Kubernetes+Jenkins
linux·云原生·kubernetes·centos·jenkins
徐子元竟然被占了!!8 小时前
Windows Server 2019 DateCenter搭建 FTP 服务器
运维·服务器·windows
-L78 小时前
进入docker中mysql容器的方法
运维·mysql·docker·容器
明月与玄武9 小时前
Docker化性能监控平台搭建:JMeter+InfluxDB+Grafana全攻略
jmeter·docker·grafana
wayuncn10 小时前
影响服务器托管费用的因素
运维·服务器·数据中心·服务器托管·物理服务器租用·服务器机柜·idc机房托管