docker 1.10版本更新image layer保存机制

docker registry 在docker 1.10.0 以后对于layer id不再随机生成,而是采用了对于layer data生成digest,这样可以方便了各image共享相同layer,迁移工具: https://hub.docker.com/r/docker/v1.10-migrator/, 镜像删除参考 here, 经过测试发现1.10版本image保存保存结构如下:

样例采用busybox 0.1和0.2 版本,内容无变化,仅仅修改了tag推到registry 2.0 repo中,busybox 0.3添加了脚本到/目录并build提交,为了方便查看,对于digest进行了缩减。

Docker Registry的老版本v1是用python写的,新版本v2是用go写的 。它们的模型略有变化。老版本v1是个链表,A层链接到B层,B层链接到C层,层层组织起来一个镜像,每一层的ID都是随机生成的。这样一来浪费空间,不能实现层存储的共享,二来有安全隐患,如果不停地提交,会造成ID冲突概率提升。但也正因如此,删除的时候完全没有顾忌,真是成也萧何败也萧何啊。新版本v2的ID是对内容进行sha256哈希之后的结果,所以相同内容的层ID一定是相同的,很好地解决了v1的问题,就是删除功能需要仔细地设计才能实现。

docker busybox 0.1 和 0.2

registry
`-- v2
    |-- blobs
    |   `-- sha256
    |       |-- 13
    |       |   `-- 13596 tag: 0.1
    |       |       `-- data  包含 layer1 + layer2 的引用
    |       |-- 2b
    |       |   `-- 2b8fd     layer2
    |       |       `-- data
    |       |-- 8d
    |       |   `-- 8ddc1     layer1
    |       |       `-- data
    |       `-- a5
    |           `-- a5990 tag: 0.2 
    |               `-- data   包含 layer1 + layer2 的引用
    `-- repositories
        `-- test
            `-- busybox
                |-- _layers
                |   `-- sha256
                |       |-- 2b8fd
                |       |   `-- link    layer2
                |       `-- 8ddc1
                |           `-- link    layer1
                |-- _manifests
                |   |-- revisions
                |   |   `-- sha256
                |   |       |-- 13596
                |   |       |   `-- link
                |   |       `-- a5990
                |   |           `-- link
                |   `-- tags
                |       |-- 0.1
                |       |   |-- current
                |       |   |   `-- link -> sha256:13596  tag: 0.1
                |       |   `-- index
                |       |       `-- sha256
                |       |           `-- 13596
                |       |               `-- link 
                |       `-- 0.2
                |           |-- current
                |           |   `-- link -> sha256:a5990  tag: 0.2
                |           `-- index
                |               `-- sha256
                |                   `-- a5990
                |                       `-- link
                `-- _uploads
                    |-- 437d5280-c534-47d5-99c8-6dd97965392b
                    |   `-- hashstates
                    |       `-- sha256
                    |           `-- 667590
                    `-- a436cb74-6899-4d4a-8f73-56dedab88ec1
                        `-- hashstates
                            `-- sha256
                                `-- 1459

busybox 0.1 0.2 0.3

`-- v2
    |-- blobs
    |   `-- sha256
    |       |-- 13
    |       |   `-- 13596                        image.v1+json    diff.tar.gzip
    |       |       `-- data   tag:0.1 metadata  [layer3,            layer2]
    |       |-- 27
    |       |   `-- 2722a
    |       |       `-- data   layer1 data  json file
    |       |-- 2b
    |       |   `-- 2b8fd
    |       |       `-- data   layer3 data json file
    |       |-- 8d
    |       |   `-- 8ddc1      
    |       |       `-- data   layer2 data binnary file  
    |       |-- a4
    |       |   `-- a4126                        image.v1+json  diff.tar.gzip   diff.tar.gzip
    |       |       `-- data   tag 0.3 metadata [layer4,        layer2,             layer1]
    |       |-- a5
    |       |   `-- a5990                        octet-stream    diff.tar.gzip
    |       |       `-- data   tag 0.2 metadata [layer3,             layer2]  [docker tag]
    |       `-- fd
    |           `-- fdf18
    |               `-- data   layer4 data
    `-- repositories
        `-- test
            `-- busybox
                |-- _layers
                |   `-- sha256
                |       |-- 2722a
                |       |   `-- link  layer4 data  json file
                |       |-- 2b8fd
                |       |   `-- link  layer3 data  json file
                |       |-- 8ddc1
                |       |   `-- link  layer2 data  binnary file
                |       `-- fdf18
                |           `-- link  layer1 data  binnary file
                |-- _manifests
                |   |-- revisions
                |   |   `-- sha256
                |   |       |-- 13596
                |   |       |   `-- link
                |   |       |-- a4126
                |   |       |   `-- link
                |   |       `-- a5990
                |   |           `-- link
                |   `-- tags
                |       |-- 0.1
                |       |   |-- current
                |       |   |   `-- link   tag 0.1 
                |       |   `-- index
                |       |       `-- sha256
                |       |           `-- 13596
                |       |               `-- link
                |       |-- 0.2
                |       |   |-- current
                |       |   |   `-- link  tag 0.2
                |       |   `-- index
                |       |       `-- sha256
                |       |           `-- a5990
                |       |               `-- link
                |       `-- 0.3
                |           |-- current
                |           |   `-- link  tag 0.3
                |           `-- index
                |               `-- sha256
                |                   `-- a4126
                |                       `-- link
                `-- _uploads
                    |-- 437d5280-c534-47d5-99c8-6dd97965392b
                    |   `-- hashstates
                    |       `-- sha256
                    |           `-- 667590
                    |-- 562bcacd-22cf-4035-a02d-1149dd3b9157
                    |   `-- hashstates
                    |       `-- sha256
                    |           `-- 2112
                    |-- a436cb74-6899-4d4a-8f73-56dedab88ec1
                    |   `-- hashstates
                    |       `-- sha256
                    |           `-- 1459
                    `-- db8bf681-de97-40b0-baf0-75fe4c407449
                        `-- hashstates
                            `-- sha256
                                `-- 1752

参考:

发表评论

电子邮件地址不会被公开。 必填项已用*标注