Docker Dev:Golang:Layer.Size()相当于 layer.Metadata中Metadata.Size的总和。

layer.Layerlayer.Metadata定义的属性的定义之间有什么主要区别?

通过阅读源头上的godoc评论我完全清楚。

我试图了解docker源代码中定义的接口。

 type LayerGetReleaser interface { ... Release(layer.Layer) ([]layer.Metadata, error) } 

看看layer.Layerlayer.Metadata的定义和文档。 layer.Layer layer.Metadata我倾向于相信它们是相关的。

此外,追踪Release(layer.Layer) ([]layer.Metadata, error)我得到这样的感觉: Release在图像的图层上循环; 删除每个图层并将图层的大小(&其他属性)作为元数据附加。 它包含一个指向这个元数据值的指针,并在操作期间传递它。

我想实现一个类似的function,但实际上并没有删除任何图像的图层。

我的意思是,我想补充一点

 type LayerGetReleaser interface { ... Release(layer.Layer) ([]layer.Metadata, error) DryRelease(layer.Layer) ([]layer.Metadata, error) } 

并执行DryRelease为:

 func (is *store) DryRelease(layer layer.Layer) ([]layer.Metadata, error) { met := []layer.Metadata{} return dryRelease(layer, &met) } func dryRelease(layer layer.Layer, met []layer.Metadata) ([]layer.Metadata, error) { // Recursively call dryRelase on layer until layer.Parent() is nil } 

我还没有想出这一部分。

但是,我的问题确实是我了解layer.Layer接口和layer.Metadata结构是否正确?