Docker基础 文件系统之AUFS

为了更好的理解docker,除了namespace和cgroups之外,在docker中如何进行存储文件也是需要进行进一步理解的。在docker中叫做storage driver,在本文中将会介绍一下docker最早支持的storage driver的AUFS,并在ubuntu上简单模拟AUFS是如何工作的。

Storage driver

docker除了支持AUFS,还支持DeviceMapper等多种storage driver。

StorageDriver
OverlayFS: overlay or overlay2
AUFS : aufs
Btrfs : btrfs
Device Mapper: devicemapper
VFS : vfs
ZFS : zfs

什么是AUFS

AUFS是一种Union File System, 它是Docker最早支持的storage driver。因为使用的时间也较长了,虽然还是不太习惯这个所谓的长的概念,docker从最初只支持AUFS一种,目前已经到支持上面6种FS,成长的速度飞快。最初使用docker的实践者们已经在实际环境中开始使用AUFS了,而且也有较强的社区支持。

Linux的文件系统

Linux的文件系统一般由bootfs和rootfs组成。

类型 说明
bootfs bootfs主要用于引导和加载内核,为什么和filesystem有关呢,在引导之前需要mount文件系统,kernel加载之后就可以功成身退了。在作linux的系统引导盘或者进行恢复的时候,你能清晰地看到这一点,在前面其他的文章中已经有过讲解,不再赘述。
rootfs 典型的linux启动之后标准的/dev /proc /bin /etc /usr/ /tmp等等都被包含在rootfs中

简单总结为bootfs在用linux的时候不出问题是意识不到的,rootfs在linux启动之后我们无时无刻不在与之打交道。

AUFS的特点

简单的来说,AUFS能将一台机器上的多个目录或文件,以联合的方式提供统一视图进行管理。下面是它的一些特点

  • 最早docker所支持的storage driver
  • 使用这种方式,container启动速度较快
  • 存储和内存的使用效率较高
  • 支持COW(copy-on-write)
  • 所有的文件和目录以及挂载点都必须在同一台机器上
  • AUFS迟迟不能加入到linux内核主线之中,目前流行的发型版只有ubuntu支持AUFS
  • docker的layer较深时效率较为低下
  • 因为AUFS是文件级别的动作方式,单个文件很大时,性能和效率不是特别理想

AUFS在docker中的使用

下面这张图显示了ubuntu的镜像是如何用AUFS联合到一起的。

AUFS把每个目录都作为一个AUFS branch,整整齐齐的垛在一起,在最上面提供了一个统一的视图union mount point进行管理。

Ubuntu下AUFS的演示

演示用ubuntu版本

root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~#
  • 1
  • 2
  • 3

事前准备

准备联合用的目录bootfs

root@ubuntu:~# mkdir -p /tmp/testrootfs/etc /tmp/testrootfs/bin /tmp/testrootfs/tmp /tmp/testrootfs/proc
root@ubuntu:~#
  • 1
  • 2
root@ubuntu:~# mkdir -p /tmp/testaufs/readonlydir
root@ubuntu:~# mkdir -p /tmp/testaufs/readwritedir/
root@ubuntu:~# touch /tmp/testaufs/readonlydir/readonlyfile.txt
root@ubuntu:~# touch /tmp/testaufs/readwritedir/readwritefile.txt
root@ubuntu:~#
  • 1
  • 2
  • 3
  • 4
  • 5

准备挂载点

root@ubuntu:~# mkdir -p /tmp/aufsmnt
  • 1

挂载点事前确认

root@ubuntu:~# ll /tmp/aufsmnt
total 8
drwxr-xr-x  2 root root 4096 Sep 22 09:30 ./
drwxrwxrwt 17 root root 4096 Sep 22 09:30 ../
root@ubuntu:~#
  • 1
  • 2
  • 3
  • 4
  • 5

挂载

使用AUFS进行挂载

root@ubuntu:/# mount -t aufs -o br=/tmp/testaufs/readonlydir=ro:/tmp/testrootfs=ro:/tmp/testaufs/readwritedir/=rw none /tmp/aufsmnt
root@ubuntu:/#
  • 1
  • 2
Option Option说明
-t filesystem类型
-o mount传递给文件系统的参数
br 挂载对象的文件夹
ro/rw 指定文件的权限只读和可读写
device 没有设备所以用none表示

挂载后确认

total 24
drwxr-xr-x  8 root root 4096 Sep 22 09:29 ./
drwxrwxrwt 17 root root 4096 Sep 22 09:30 ../
drwxr-xr-x  2 root root 4096 Sep 22 09:26 bin/
drwxr-xr-x  2 root root 4096 Sep 22 09:26 etc/
drwxr-xr-x  2 root root 4096 Sep 22 09:26 proc/
-rw-r--r--  1 root root    0 Sep 22 09:29 readonlyfile.txt
-rw-r--r--  1 root root    0 Sep 22 09:29 readwritefile.txt
drwxr-xr-x  2 root root 4096 Sep 22 09:26 tmp/
[email protected]:/#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

确认只读

root@ubuntu:/# echo "hello world" >/tmp/aufsmnt/readonlyfile.txt
-su: /tmp/aufsmnt/readonlyfile.txt: Read-only file system
root@ubuntu:/#
  • 1
  • 2
  • 3

ro方式的文件,是不能写的

确认可写

root@ubuntu:/# echo "hello world" > /tmp/aufsmnt/readwritefile.txt
root@ubuntu:/# cat /tmp/aufsmnt/readwritefile.txt
hello world
root@ubuntu:/#
  • 1
  • 2
  • 3
  • 4

rw方式的文件,是可写的

耐着性子看完本篇之后,结合前面的一些namespace和cgroups的例子,再结合busybox这把小巧的武器,是不是突然发现只用linux内核功能也能做到docker雏形的特性了。虽然重复造轮子不是我们的目的,研究一下人家轮子的原理能拆能装才是一个蓝领工人应有的技能。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

原文地址:https://www.cnblogs.com/firsttry/p/10159913.html

时间: 2024-10-11 02:09:52

Docker基础 文件系统之AUFS的相关文章

Docker基础技术:AUFS

AUFS是一种Union File System,所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中.UnionFS的一个最主要的应用是,把一张CD/DVD和一个硬盘目录给联合 mount在一起,然后,你就可以对这个只读的CD/DVD上的文件进行修改(当然,修改的文件存于硬盘上的目录里). AUFS又叫Another UnionFS,后来叫Alternative UnionFS,后来可能觉得不够霸气,叫成Advance UnionFS.是个叫Junjiro Okajima(岡

一图看尽Docker容器文件系统

Dockerfile是软件的原材料,Docker镜像是软件的交付品,而Docker容器则可以认为是软件的运行态.从应用软件的角度来看,Dockerfile.Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石. Docker镜像 Docker镜像是Dockerfile的产物,是Docker容器的前提,大有承前启后之意.Docker技术发展两年有余,相

关于对docker的文件系统的理解

Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚.下面就聊一下我对docker文件系统的理解 Docker 使用的支持的文件系统有以下几种: aufs.devicemapper.btrfs  Vfs 我们先来介绍一下aufs Aufs(advanced multi layered unification filesystem), 直译过来就是高级分层统一文件系统.做为一种Union FS 它支持将不同的目录挂载到同一

【补充】docker基础学习

docker 基础知识 之前写了一篇docker未授权访问的文章,现在来补充一下docker基础知识,以便更好的学习docker上的漏洞. docker是一款轻量级的虚拟化的产品,它属于层级化的架构.最底层是LXC和文件系统AUFS,上面是各种镜像,docker实际上是具有依赖关系的多个层组成的,不同的container可能共享底层的资源.docker的核心是基于cgroup和namespace隔离和限制资源. Cgroups是control groups的缩写,是Linux内核提供的一种可以限

Docker 联合文件系统

联合文件系统(UnionFS)是一种分层.轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem). 联合文件系统是 Docker 镜像的基础.镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像. 另外,不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改

修改CentOs7 上Docker默认文件系统DeviceMapper为OverlayFS

最近一直在研究Mesos, Marathon跟Docker结合的容器云平台,Mesos 框架已经搭好,并且Marathon也可以实现简单的Docker应用管理了,然后今天尝试搭建一下mesosphere公司的DC/OS平台(https://dcos.io/),利用这个平台可以很容易实现基于容器的云计算平台的资源调度,管理,应用分配,负载均衡,动态扩展,故障转移等.DC/OS底层系统也是基于Docker的,根据官方文档建议,我们把CentOS7系统上Docker默认的文件系统DeviceMappe

Docker基础技术:Linux Namespace(上)

导读 时下最热的技术莫过于Docker了,很多人都觉得Docker是个新技术,其实不然,Docker除了其编程语言用go比较新外,其实它还真不是个新东西,也就是个新瓶装旧酒的东西,所谓的The New “Old Stuff”.Docker和Docker衍生的东西用到了很多很酷的技术,我会用几篇 文章来把这些技术给大家做个介绍,希望通过这些文章大家可以自己打造一个山寨版的docker.先从Linux Namespace开始. 简介 Linux Namespace是Linux提供的一种内核级别环境隔

Docker基础入门及示例

Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环境部署当中.这篇文章我将针对以下几个方面简单介绍: 1. docker的基础介绍 2. docker在windows下的安装配置 3. 基础命令介绍 4. 使用vs2017在docker下调试 5. 打包一个.net core站点镜像 一. docker基础介绍 可能很多朋友对docker还停留在听

Docker实战(一):Docker基础命令

Docker基础命令 下面简单介绍一下Docker常用的一些基础命令 # 在ubuntu中安装docker $ sudo apt-get install docker.io # 查看docker的版本信息 $ docker version # 查看安装docker的信息 $ docker info # 查看本机Docker中存在哪些镜像 $ docker images # 检索image $ docker search ubuntu:14.04 # 在docker中获取ubuntu镜像 $ do