docker相关文件存放在:/var/lib/docker目录下

镜像的存储结构主要分两部分,一是镜像ID之间的关联,一是镜像ID与镜像名称之间的关联,前者的结构体叫Graph,后者叫TagStore.

  • /var/lib/docker/repositories-aufs TagStore的存储地方,里面有image id与reponame ,tag之间的映射关系. aufs是driver名
  • /var/lib/graph/ 下面没有layer目录,只有每个镜像的json描述文件和layersize大小
  • /var/lib/docker/aufs/diff/ 每层layer与其父layer之间的文件差异,有的为空,有的有一些文件(镜像实际存储的地方)
  • /var/lib/docker/aufs/layers/ 每层layer一个文件,记录其父layer一直到根layer之间的ID,每个ID一行。大部分文件的最后一行都一样,表示继承自同一个layer.
  • /var/lib/docker/aufs/mnt/ 有容器运行时里面有数据(容器数据实际存储的地方,包含整个文件系统数据),退出时里面为空

  • /var/lib/docker/volumes volumes卷的存储地

repositories-aufs

/var/lib/docker/repositories-aufs 存放的是本地所有仓库TagStore;可以对应到docker images 显示的信息;

root@n6-026-137:registry# cat /var/lib/docker/repositories-aufs |python -mjson.tool
{
    "Repositories": {
        "baseimage": {
            "install_test_service": "7fc2548d2b3c6fa82d7a4da8a67e8619145d21b48009d53eeef2c00823d0f118",
            "v0.1": "5a337e287e253c6cf573c0a64449e5bd648fdebd3787e0cc36f3b66c1c89ce83"
        },
        "baseimage.pre": {
            "v1.0": "3e2059d8241e7a623972728cf6ec7093eb54a77f481c9cd0b0a86589ea1368d9"
        },
......

Graph信息

/var/lib/docker/graph/ 下存储的是有镜像;每个镜像一个uuid值命名的目录,可以从repositories-aufs中找到具体是哪个镜像;

比如:baseimage:v1.0的5a337e287e253c6cf573c0a64449e5bd648fdebd3787e0cc36f3b66c1c89ce83 :

root@n6-026-137:registry# ls /var/lib/docker/graph/5a337e287e253c6cf573c0a64449e5bd648fdebd3787e0cc36f3b66c1c89ce83/
checksum  json  layersize

json -保存着关于这个镜像的元数据 layersize – 一个整数,表示layer的大小。

镜像元数据:

root@n6-026-137:registry# cat /var/lib/docker/graph/5a337e287e253c6cf573c0a64449e5bd648fdebd3787e0cc36f3b66c1c89ce83/json|python -mjson.tool
{
    "Size": 0,
    "architecture": "amd64",
    "author": "Sebastian Krohn <seb@gaia.sunn.de>",
    "config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/lib/systemd/systemd"
        ],
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "DEBIAN_FRONTEND=noninteractive",
            "container=docker"
        ],
        "ExposedPorts": null,
        "Hostname": "bcad5a346f31",
        "Image": "8c7a4f4e1f099c9a59fcfa5bd4859f0b58e6b49c36e9a19ab0f453b4244c2cd2",
        "Labels": {},
        "MacAddress": "",
        "NetworkDisabled": false,
        "OnBuild": [],
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "VolumeDriver": "",
        "Volumes": {
            "/run": {},
            "/run/lock": {},
            "/sys/fs/cgroup": {},
            "/tmp": {}
        },
        "WorkingDir": ""
    },
    "container": "9f909663a7c412464a9645800887e3104e04c8e070fa7b4741758ded5de6903f",
    "container_config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/bin/sh",
            "-c",
            "#(nop) CMD [\"/lib/systemd/systemd\"]"
        ],
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "DEBIAN_FRONTEND=noninteractive",
            "container=docker"
        ],
        "ExposedPorts": null,
        "Hostname": "bcad5a346f31",
        "Image": "8c7a4f4e1f099c9a59fcfa5bd4859f0b58e6b49c36e9a19ab0f453b4244c2cd2",
        "Labels": {},
        "MacAddress": "",
        "NetworkDisabled": false,
        "OnBuild": [],
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "",
        "VolumeDriver": "",
        "Volumes": {
            "/run": {},
            "/run/lock": {},
            "/sys/fs/cgroup": {},
            "/tmp": {}
        },
        "WorkingDir": ""
    },
    "created": "2016-04-21T10:42:07.532547156Z",
    "docker_version": "1.7.0",
    "id": "5a337e287e253c6cf573c0a64449e5bd648fdebd3787e0cc36f3b66c1c89ce83",
    "os": "linux",
    "parent": "8c7a4f4e1f099c9a59fcfa5bd4859f0b58e6b49c36e9a19ab0f453b4244c2cd2"
}

查看baseimage:v1.0的有多少层 : shell root@n6-026-137:docker# vi /var/lib/docker/aufs/layers/5a337e287e253c6cf573c0a64449e5bd648fdebd3787e0cc36f3b66c1c89ce83 1 8c7a4f4e1f099c9a59fcfa5bd4859f0b58e6b49c36e9a19ab0f453b4244c2cd2 2 83233435161ad3b1155260e1fc2592e0b0bf20840e8862216cbfa5a9cd6f538c 3 4a81de8c1c50f0c08a3b3810d34448a247ee5dc5a5407f79424a90f6c94c84d3 4 a7643b953718f9bee57ac8a4e85a4386e9268a89637fcb78c76a6ad9ceaa7649 5 46f55699874da611db2114a30d1b39b9e59bc97d383e316502e195115ec1a7dd 6 caa0a879a980170ff647ef7465f987bb035b896a2085e26d7e39887860bdcd98 7 fc08f28a2a36f3607aa2999a0c5702775f289b0db0be84dc8ec1dc4d8f0ec740 8 de1c21c78ec7ee7dde44e34071515c0ece8d2b7688e7a863216ba6a7845e6b8b 9 fb35fe2ca7e9b08ca663811a2509a3678100ebc897aa89560172d2f485d224ff 10 472023c9482e1183a61967c7ee2fdbc7970c80b8bfe3b3825f00a257851da081 11 b6c85061d955fae31c567009c1f82bf9b1e6d57634395aae68e9557914ce29d5 12 38c2a8f4286db6e4bd9df16819ac0e8bab51b704dad5f3381546edc509a13cbc 13 23f5441787467e3cb64f1a865094b77479803584b9ee929371528086525378ed 14 a7baf4d8d152cd332e873448471c6e0f8994774b19b20368e010f30e8f04ef42 15 d1cc0e6af8490e94cde088bec8b267615464eeb1af20bcbe577d055ff231e634 16 6b8a1ecb2364a8ea74873a6bac5104699c260a392ce403ca137b2ce5c5235114 

Docker镜像文件存储结构的更多相关文章

  1. win10上修改docker的镜像文件存储位置

    记住:修改的是docker从服务器上拉下来的镜像文件存储位置(本地),是不是镜像源地址(服务器) 首先 win10下的docker有可视化操作界面和命令行操作,下载了docker-ce.exe双击后就 ...

  2. PostgreSQL的存储系统二:REDOLOG文件存储结构二

    REDOLOG文件里的用户数据和数据文件里的用户数据存储结构相同 几个月前同事给台湾一家公司培训<pg9 ad admin>时,有个学员提及WAL里记录的内容为Query时的SQL语句(比 ...

  3. 从零开始构建一个centos+jdk7+tomcat7的docker镜像文件

    从零开始构建一个centos+jdk7+tomcat7的镜像文件 centos7系统下docker运行环境的搭建 准备centos基础镜像 docker pull centos 或者直接下载我准备好的 ...

  4. 如何将docker镜像文件上传至Docker Hub

    一.Docker Hub中新建存储库 注册,登录Docker Hub之后,点击右上角Create Repository,创建存储库,如下图所示: 取个名字,我这里取名为lihui_demo.并且可以选 ...

  5. docker学习系列(三):docker镜像的分层结构

    docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...

  6. docker镜像的分层结构三

    docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...

  7. Docker镜像文件操作

    1什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式).最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永 ...

  8. 4、docker镜像:花卷结构、commit镜像

    1.是什么 docker images 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. ...

  9. 【Linux】文件存储结构

    大部分的Linux文件系统(如ext2.ext3)规定,一个文件由目录项.inode和数据块组成: 目录项:包括文件名和inode节点号.  Inode:又称文件索引节点,包含文件的基础信息以及数据块 ...

随机推荐

  1. Spring

    Spring 一个支持DI/IOC和AOP的开源容器框架 特点 DI/IOC DI 依赖注入(组件以特定方式接收来自容器的资源注入) IOC 控制反转(反转资源获取的方向) AOP 面向切面编程 开发 ...

  2. Samba文件服务器详细配置步骤

    准备安装 环境:CentOS 6.3_x64bit 安装:Minimal(最小) 1.配置IP地址 2.挂载:[root@localhost ~]# mount -t iso9660 /dev/cdr ...

  3. C#先序遍历2叉树(非递归)

    找了下先序遍历二叉树C# 实现貌似没有 顺手些了一个 大致思路是: 传入根节点,然后依次循环其子节点推入到栈中, 当推入的节点没有子节点的时候(叶子)或者所有子节点均已经遍历过后(上一次遍历的节点是该 ...

  4. CentOs下安装maven

    现有的一个项目使用了Maven来管理,源代码放到了Subversion中.虽然Maven管理项目很方便,但是部署起来还是很麻烦的.先要在本地生成项目jar包,上传到服务器,然后再重启服务.如果在服务器 ...

  5. Linux下man手册使用

    在 linux 环境下,为了查看一下 free 函数的原型,执行 man free 命令,发现显示结果为系统的 free 命令帮助,而不是库文件中的 free 函数帮助.查阅了一下,发现 man 的使 ...

  6. 安装Mysq方法

    前言: 此方法只能借鉴,如果网友安装失败,后果自负. 借鉴的书籍<跟老男孩学Linux运维 Web集群实战> 文章所使用的Mysql:https://yunpan.cn/Oc6RkgKRF ...

  7. nginx,控浏览器缓存,前端优化方案

    1,困惑 做web项目,对于开发者来说,一个最头痛的问题就是浏览器缓存,有缓存,js更改了,html更改了,发布服务器以后用户往往无法通过浏览器访问到最新的类容,需要用户主动去刷新页面, 因为一直做企 ...

  8. YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性

    ASP.NET Web API 可非常方便地创建基于 HTTP 的 Services,这些服务可以非常方便地被几乎任何形式的平台和客户端(如浏览器.Windows客户端.Android设备.IOS等) ...

  9. CF 484E - Sign on Fence

    E. Sign on Fence time limit per test 4 seconds memory limit per test 256 megabytes input standard in ...

  10. Lucene.net应用

    1.加入盘古分词方法 /// <summary> /// 对输入的搜索的条件进行分词 /// </summary> /// <param name="str&q ...