前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Notes-storage

Docker Notes-storage

作者头像
itliusir
发布2018-08-03 14:18:45
3480
发布2018-08-03 14:18:45
举报
文章被收录于专栏:刘君君

摘要: Docker Notes系列为学习Docker笔记,本文是Docker存储介绍

正文:

Docker 存储管理

Docker 镜像元数据管理

由上篇文章的镜像管理可知Docker以分层形式存储镜像,元数据与镜像文件的存储也是完全隔离开来

repository 元数据

repository 由具有某个功能的Docker镜像的所有迭代版本构成的镜像库,其本地持久化文件存放于/var/lib/docker/image/{Storage Driver}/repositories.json中,结构如下:

代码语言:javascript
复制
[root@cf /]# docker info | grep 'Storage Driver'
Storage Driver: overlay2
[root@cf /]# cat /var/lib/docker/image/overlay2/repositories.json
{
  "Repositories": {
    "busybox": {
      "busybox:latest": "sha256:8c811b4aec35f259572d0f79207bc0678df4c736eeec50bc9fec37ed936a472a",
      "busybox:test": "sha256:357bb11d2c366a4c60bcb20580407694f2f66f091452c8680dadf2761dc3cba0",
      "busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47": "sha256:8c811b4aec35f259572d0f79207bc0678df4c736eeec50bc9fec37ed936a472a"
    },
    "centos": {
      "centos:7": "sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5",
      "centos@sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322": "sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5"
    }
    ...
  }
}

Docker 默认采用SHA256算法根据镜像元数据配置文件计算出镜像ID

image 元数据

image 元数据包括了如下内容:

代码语言:javascript
复制
[root@cf /]# cat /var/lib/docker/image/overlay2/imagedb/content/sha256/8c811b4aec35f25...
{
  "architecture": "amd64",
  "config": {
    "Hostname": "",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "sh"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:3e8a1c5213eb57c6ea8ddb27d86a241698741ce60d9053b641f57a7e455f6842",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": null
  },
  "container": "617bfbb850a66642161d4925e0c00f77caa46e22057409788207e7b2edb86c3e",
  "container_config": {
    "Hostname": "617bfbb850a6",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "/bin/sh",
      "-c",
      "#(nop) ",
      "CMD [\"sh\"]"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:3e8a1c5213eb57c6ea8ddb27d86a241698741ce60d9053b641f57a7e455f6842",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": {
      
    }
  },
  "created": "2018-05-23T21:19:31.132152818Z",
  "docker_version": "17.06.2-ce",
  "history": [
    {
      "created": "2018-05-23T21:19:30.902651601Z",
      "created_by": "/bin/sh -c #(nop) ADD file:5f0439d8328ab58c087cd067c91ce92765da98916d91b083df6590477b7b9f19 in / "
    },
    {
      "created": "2018-05-23T21:19:31.132152818Z",
      "created_by": "/bin/sh -c #(nop)  CMD [\"sh\"]",
      "empty_layer": true
    }
  ],
  "os": "linux",
  "rootfs": {
    "type": "layers",
    "diff_ids": [
      "sha256:432b65032b9466b4dadcc5c7b11701e71d21c18400aae946b101ad16be62333a"
    ]
  }
}
layer元数据

由上文可知layer负责与镜像层和容器层元数据有关的增删改查,并将其增删改查操作映射到实际存储镜像层文件系统的graphdriver模块。

用户在Docker宿主机上下载了某个镜像层之后,Docker会在宿主机上基于镜像层文件包和image元数据,构建本地的layer元数据,如diff、size等,

代码语言:javascript
复制
[root@cf /]# cat /var/lib/docker/image/overlay2/layerdb/sha256/432b65032b9466b4d.../
cache-id           diff               size               tar-split.json.gz

Docker 存储驱动

为了支持镜像的分层(只读层、读写层)与写时复制等特性,Docker提供了存储驱动的接口。存储驱动根据操作系统底层的支持提供了针对某种文件系统的初始化操作以及对镜像层的增删改查和差异比较等操作

常用存储驱动
  1. aufs aufs是一种支持联合挂载的文件系统,相当于讲不同目录挂载到同一目录下,这些目录的挂载是分层次的,每一层都是一个普通的文件系统
代码语言:javascript
复制
[root@cf /]# cd /var/lib/docker/aufs
  1. device mapper device mapper是Linux 2.6内核中提供的一种从逻辑设备到物理设备的映射框架机制,用户可以很方便地根据自己的需要制定实现存储资源的管理策略 device mapper 本质功能就是根据映射关系描述IO处理规则,当映射设备接收到IO请求的时候,这个IO请求会根据映射表逐级转发,直到这个请求最终传到最底层的物理设备上
device mapper
device mapper

如上图所示,映射设备是内核向外提供的逻辑设备,而目标设备即可以是物理设备也可以同样是映射设备

代码语言:javascript
复制

	
[root@cf /]# cd /var/lib/docker/devicemapper
  1. overlay overlayFS是一种新型联合文件系统,它允许用户将一个文件系统与另一个文件系统重叠(overlay),在上层的文件系统中记录更改,而下层的文件系统保持不变
代码语言:javascript
复制
[root@cf overlay2]# tree -L 2
.
├── 05f14d2b45bfa0ff20f...
│   ├── diff
│   ├── link
│   ├── lower
│   └── work
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文:
  • Docker 存储管理
    • Docker 镜像元数据管理
      • repository 元数据
      • image 元数据
      • layer元数据
    • Docker 存储驱动
      • 常用存储驱动
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档