Docker Notes-storage

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

正文:

Docker 存储管理

Docker 镜像元数据管理

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

repository 元数据

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

[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 元数据包括了如下内容:

[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等,

[root@cf /]# cat /var/lib/docker/image/overlay2/layerdb/sha256/432b65032b9466b4d.../
cache-id           diff               size               tar-split.json.gz

Docker 存储驱动

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

常用存储驱动

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

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

	
[root@cf /]# cd /var/lib/docker/devicemapper
  1. overlay overlayFS是一种新型联合文件系统,它允许用户将一个文件系统与另一个文件系统重叠(overlay),在上层的文件系统中记录更改,而下层的文件系统保持不变
[root@cf overlay2]# tree -L 2
.
├── 05f14d2b45bfa0ff20f...
│   ├── diff
│   ├── link
│   ├── lower
│   └── work

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

在Kubernetes上运行SAP UI5应用(上)

2018年只剩最后30天了。Jerry在2017年的最后一天,曾经立下一个目标:这个微信公众号在2018年保证至少每周发布一篇SAP原创技术文章。

810
来自专栏码代码的陈同学

Docker容器无法被stop or kill问题

使用docker stop / docker kill / docker rm -f 等命令处理后,容器立马自动重启

1.2K3
来自专栏JasonhavenDai

Docker初尝试1.What is Docker?2.Try It3.Use It

1.What is Docker? 关于Docker,网上有很多讲解,不在此处赘述,提供两个不错的学习链接,望自行学习。 Docker Github Do...

2905
来自专栏aCloudDeveloper

CPU 虚拟化

前面 虚拟化技术总览 中从虚拟平台 VMM 的角度,将虚拟化分为 Hypervisor 模型和宿主模型,如果根据虚拟的对象(资源类型)来划分,虚拟化又可以分为计...

2806
来自专栏运维前线

容器中网络使用

在默认网络上启动一个容器 Docker通过使用网络驱动程序支持网络容器。默认情况下,Docker为您提供了两个网络驱动程序,bridge和overlay.查看...

1998
来自专栏月色的自留地

手工在Docker for mac上安装Kubernetes

2774
来自专栏王小雷

Docker网络管理机制实例解析+创建自己Docker网络

实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开...

2449
来自专栏CSDN技术头条

一个开发者的Linux Containers之旅

告诉你们一个秘密:所有的DevOps 云工具是如何进入我的应用程序又与世界联系起来的对我来说至今仍然是一个迷。但是,随着时间的推移,我已经逐渐意识到,了解如何去...

2136
来自专栏Django中文社区

用 Windows 跟着官方教程学 Docker 之一步一坑记

据说 Docker 可以提供一种更加现代化的部署方式,于是乎想趁着一个空闲周末来好好撸一遍 Dcoker 入门文档。之前花了一个小时通读了一遍 Docker 的...

7238
来自专栏数据和云

Oracle 11g R2 RAC 高可用连接特性 – SCAN 详解

许春植(Luocs) (阿里巴巴高级数据库管理员,7年以上数据库运维管理经验,擅长MySQL、Oracle及MongoDB数据库,目前主要研究并建设Mongo...

3735

扫码关注云+社区