热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker系统八:Docker的存储驱动

Docker存储驱动1.Docker存储驱动历史Docker目前支持的grephdriver包括:AUFSdevice-mapperbtrfsoverlayfs(重点)关于各存储驱的详细介绍参照D

Docker存储驱动

1. Docker存储驱动历史

Docker目前支持的greph driver包括:

  • AUFS
  • device-mapper
  • btrfs
  • overlayfs(重点)

关于各存储驱的详细介绍参照Docker五种存储驱动原理及应用场景和性能测试对比

2. Docker overlayfs driver

1) 介绍

docker使用overlaysf的介绍如下:

  • lowerdir指向image layer;
  • upperdir指向container layer;
  • merged整合lowerdir与upperdir提统统一视图给容器作为根文件系统

如下图:

2)容器内文件的读写优先级情况

I. read file
  • upperdir存在,从container layer读取;
  • upperdir不存在,从lowerdir,即 image layer读取;
II. write file
  • upperdir存在,直接在upperdir写;
  • upperdir不存在,overlay发起copy_up操作,从lowerdir拷贝文件到upperdir进行写,拷贝只会在第一次打开时发生。
III. deleting files and directories
  • 删除文件时,upperdir会创建一个witheout文件,会隐藏lowerdir的文件(非删除);
  • 删除目录时,upperdir会创建一个opaque diectory,隐藏lowerdir的目录;

3). overlayfs driver实践

  • 指定overlay driver启动:
$dockerd --storage-driver=overlay
$docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.06.0-ce
Storage Driver: overlay
Backing Filesystem: extfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a
runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4
init version: 949e6fa
  • 下载一个镜像:
$docker pull centos:centos6
$docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos6 7ea307891843 4 weeks ago 194MB
  • 查看镜像的对应目录
$ls /var/lib/docker/overlay/
8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7
$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/
bin etc home lib lib64 lost+found media mnt opt root sbin selinux srv tmp usr var
  • 创建容器
$docker run -it centos:centos6 /bin/bash
#在host里查看
$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/
lower-id merged/ upper/ work/
cat /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/lower-id
8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7
$cat /proc/mounts
overlay /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/merged overlay rw,relatime,lowerdir=/var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root,upperdir=/var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper,workdir=/var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/work 0 0

可以看到,容器对应的目录有三个(merged, upper, work), work用于overlayfs实现copy_up操作, lower-id保存images ID。

  • 容器内创建文件
$echo "hello" > /root/f1.txt
$ls /root/
anaconda-ks.cfg f1.txt install.log install.log.syslog

Host上overlay目录变化

$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/merged/root/
anaconda-ks.cfg f1.txt install.log install.log.syslog
$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/
f1.txt
$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/root/
anaconda-ks.cfg install.log install.log.syslog
  • 容器内删除文件
$rm /root/install.log
$ls /root/

Host上overlay目录变化

$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/root/
anaconda-ks.cfg install.log install.log.syslog

$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/merged/root/
anaconda-ks.cfg f1.txt install.log.syslog

$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/* -l
-rw-r--r-- 1 root root 6 Sep 3 22:17 /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/f1.txt
#发现upperdir多了一下instll.log文件
c--------- 1 root root 0, 0 Sep 3 22:24 /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/install.log

$cat /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/lower-id
8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7

$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/root/
anaconda-ks.cfg install.log install.log.syslog

推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • k8s进阶之搭建私有镜像仓库
    企业级私有镜像仓 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 示例代码packagemainimport("net""os"&am ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 【laravel5.6】yii  Process class relies on proc_open, which is not available on your PHP installation.
    部署服务器的时候,使用composer来安装依赖。遇到了从错误提示信息中可以看到是因为关闭了PHP的proc_get_status()函数,那么如何解决 ... [详细]
  • 则将追究法律责任。[url]http:future.blog.51cto.com2695983651[url]使用rsync来实现文件同步 ... [详细]
author-avatar
暖日春阳基_910
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有