Doker存储与文件系统

1、Doker支持的文件系统

2、Aufs文件系统介绍

Aufs 文件系统实验

Ubuntu下使用的是AUFS文件系统

通过docker info查看Docker信息:

[email protected]:/var/lib/docker/aufs/mnt# docker info

Containers: 1

Running: 1

Paused: 0

Stopped: 0

Images: 7

Server Version: 1.12.0

Storage Driver: aufs

 Root Dir: /var/lib/docker/aufs

 Backing Filesystem: extfs

Dirs: 39

Dirperm1 Supported: true

Logging Driver: json-file

Cgroup Driver: cgroupfs

Plugins:

Volume: local

Network: bridge null host overlay

Swarm: inactive

Runtimes: runc

Default Runtime: runc

Security Options: apparmor seccomp

Kernel Version: 4.4.0-34-generic

Operating System: Ubuntu 16.04 LTS

OSType: linux

Architecture: x86_64

CPUs: 32

Total Memory: 125.7 GiB

Name: compute2

ID: KGBV:CXG7:2AD4:CXTH:RGTI:5SIT:VWLS:GAGN:Y6ZG:LYFR:DH4N:MYEY

Docker Root Dir: /var/lib/docker

Debug Mode (client): false

Debug Mode (server): false

Registry: https://index.docker.io/v1/

WARNING: No swap limit support

Insecure Registries:

127.0.0.0/8

[email protected]:/var/lib/docker/aufs/mnt#

Docker存储目录

[email protected]:/var/lib/docker/aufs# pwd

/var/lib/docker/aufs/

Docker镜像存储目录

[email protected]:/var/lib/docker/aufs/diff# pwd

/var/lib/docker/aufs/diff

[email protected]:/var/lib/docker/aufs/diff# ls -lahs| xargs ls

[email protected]:/var/lib/docker/aufs/mnt# pwd

/var/lib/docker/aufs/mnt

Aufs实验:测试将两个目录挂载到同一个目录下

[email protected]:~# mkdir dir1

[email protected]pute2:~# mkdir dir2

[email protected]:~# mkdir aufs

[email protected]:~# mount  -t aufs -o br=/root/dir1=ro:/root/dir2=rw none /root/aufs

[email protected]:~# cd aufs/

[email protected]:~/aufs# ls

file1.txt  file2.txt

[email protected]:~/aufs# echo wirte >> file1.txt

-bash: file1.txt: Read-only file system

[email protected]:~/aufs# echo wirte >> file2.txt

[email protected]:~/aufs# cat file2.txt

file2

wirte

[email protected]:~/aufs#

3、Devicemapper文件系统介绍

Devicemapper文件系统实验:

先修改配置文件修改使用的文件系统为devicemapper文件 系统

[email protected]:~# vim /etc/default/docker

DOCKER_OPTS="--storage-driver=devicemapper"

Centos7下 默认使用的是devicemapper

[[email protected] default]# docker info

Containers: 1

Running: 1

Paused: 0

Stopped: 0

Images: 1

Server Version: 1.10.3

Storage Driver: devicemapper

 Pool Name: docker-253:1-41956292-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 10.74 GB

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

Data Space Used: 425.4 MB

Data Space Total: 107.4 GB

Data Space Available: 29.9 GB

Metadata Space Used: 1.18 MB

Metadata Space Total: 2.147 GB

Metadata Space Available: 2.146 GB

Udev Sync Supported: true

Deferred Removal Enabled: false

Deferred Deletion Enabled: false

Deferred Deleted Device Count: 0

Data loop file: /var/lib/docker/devicemapper/devicemapper/data

WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.

Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata

Library Version: 1.02.107-RHEL7 (2016-06-09)

Execution Driver: native-0.2

Logging Driver: journald

Plugins:

Volume: local

Network: null host bridge

Kernel Version: 3.10.0-327.22.2.el7.x86_64

Operating System: CentOS Linux 7 (Core)

OSType: linux

Architecture: x86_64

Number of Docker Hooks: 2

CPUs: 2

Total Memory: 3.702 GiB

Name: compute.novalocal

ID: VN7J:AB7A:YIO4:QXQN:6KRO:SSBY:A7RF:IFZJ:JHQA:4N6S:FGLS:PIXO

WARNING: bridge-nf-call-iptables is disabled

WARNING: bridge-nf-call-ip6tables is disabled

Registries: docker.io (secure)

[[email protected] default]# cd /var/lib/docker/devicemapper/devicemapper/

[[email protected] devicemapper]# ls

data  metadata

Devicemapper文件系统使用测试

查看data文件的大小

[[email protected] devicemapper]# ls -lahs

total 403M

0 drwx------. 2 root root   32 Sep  8 00:26 .

0 drwx------. 5 root root   50 Sep  8 00:29 ..

402M -rw-------. 1 root root 100G Sep  8 02:47 data

1.3M -rw-------. 1 root root 2.0G Sep  8 20:50 metadata

进入 容器创建一个200M的文件

[[email protected] devicemapper]# docker ps

CONTAINER ID        IMAGE                                COMMAND             CREATED             STATUS              PORTS               NAMES

6eb042a5a721        docker.io/cmer81/centos7-openstack   "sh"                18 hours ago        Up 18 hours                             docker-openstack

[[email protected] devicemapper]# docker exec -it docker-openstack /bin/bash

[[email protected] /]# dd if=/dev/zero of=aa.txt bs=2M count=100

100+0 records in

100+0 records out

209715200 bytes (210 MB) copied, 0.214644 s, 977 MB/s

[[email protected] /]# ls -alhs

total 201M

4.0K drwxr-xr-x.  17 root root 4.0K Sep  8 20:57 .

4.0K drwxr-xr-x.  17 root root 4.0K Sep  8 20:57 ..

0 -rwxr-xr-x.   1 root root    0 Sep  8 02:45 .dockerenv

0 -rwxr-xr-x.   1 root root    0 Sep  8 02:45 .dockerinit

200M -rw-r--r--.   1 root root 200M Sep  8 20:57 aa.txt

再次查看data文件的大小

[[email protected] ~]# cd /var/lib/docker/devicemapper/devicemapper/

[[email protected] devicemapper]# ls -lahs

total 603M

0 drwx------. 2 root root   32 Sep  8 00:26 .

0 drwx------. 5 root root   50 Sep  8 00:29 ..

602M -rw-------. 1 root root 100G Sep  8 20:59 data          

1.3M -rw-------. 1 root root 2.0G Sep  8 20:57 metadata

4、Overlayfs文件系统

修改docker 的主配置文件

[email protected]:~# vim /etc/default/docker

DOCKER_OPTS="--storage-driver=overlay"

[email protected]:~# service docker restart

[email protected]:~# grep overlayfs /proc/filesystems

[email protected]:~# modinfo overlayfs

filename:       /lib/modules/4.4.0-34-generic/kernel/fs/overlayfs/overlay.ko

alias:          overlayfs

alias:          fs-overlayfs

alias:          fs-overlay

license:        GPL

description:    Overlay filesystem

author:         Miklos Szeredi <[email protected]>

srcversion:     0B3D6723476322D2ADDC9B2

depends:

intree:         Y

vermagic:       4.4.0-34-generic SMP mod_unload modversions

[email protected]:~# mount -t overlay overlay -o lowerdir=/root/lower,upperdir=/root/upper /root/marged

5、volume

创建容器docker-volume1,并将容器中目录/root下映射到/data/volume下

[email protected]:/data/volume# docker run -d --name docker-volume1 -v /data/volume:/root cmer81/centos7-openstack

ede0cd25a6808c0cb044bca969cbd1285dc49c485ea2e71c1ffec1116ecb6b5a

[email protected]:/data/volume# docker exec -it docker-volume1 sh

sh-4.2# ls

anaconda-post.log  bin    dev  etc  home    lib  lib64  lost+found    media  mnt  opt  proc  root  run  run.sh  sbin    srv  sys  tmp  usr  var

sh-4.2# cd root/

sh-4.2# ls

sh-4.2# touch test

sh-4.2# exit

exit

[email protected]:/data/volume# ls

test

--volumes-from参数实验:

可以实现容器间的数据共享,将上面创建的docker-volume1下映射到主机/data/volume共享到新建容器docker-volumes-from的/root中

[email protected]:~# docker ps

CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES

ede0cd25a680        cmer81/centos7-openstack   "/run.sh"           15 minutes ago      Up 15 minutes                           docker-volume1

47d5fe8a136a        cmer81/centos7-openstack   "/run.sh"           21 minutes ago      Up 21 minutes                           docker-volume

[email protected]:~# docker run -it --name docker-volumes-from --volumes-from docker-volume1 cmer81/centos7-openstack sh

sh-4.2# ls

anaconda-post.log  bin    dev  etc  home    lib  lib64  lost+found    media  mnt  opt  proc  root  run  run.sh  sbin    srv  sys  tmp  usr  var

sh-4.2# ls root

test

sh-4.2# exit

exit

[email protected]:~# cd /data/volume/

[email protected]:/data/volume# ls

test

[email protected]:/data/volume#

[email protected]:/data/volume# docker ps

CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES

51617b348155        cmer81/centos7-openstack   "sh"                5 minutes ago       Up 2 seconds                            docker-volumes-from

ede0cd25a680        cmer81/centos7-openstack   "/run.sh"           22 minutes ago      Up 22 minutes                           docker-volume1

47d5fe8a136a        cmer81/centos7-openstack   "/run.sh"           27 minutes ago      Up 27 minutes                           docker-volume

时间: 2024-11-02 22:55:54

Doker存储与文件系统的相关文章

块存储、对象存储和文件系统: 它们对容器而言意味着什么?

当管理员首次开始使用Docker容器时,通常会使其感到惊讶的是, 容器本身采用的是非永久性存储.当容器被移除时, 容器的存储也被移除了. 当然,如果没有办法实现永久存储,则容器应用程序的使用将会非常受限.幸运的是,有些方法在容器化的环境中可以实现持久存储.尽管容器本身的原生存储是非持久性的,但可以将容器连接到容器外部的存储区.此操作允许持久性数据的存储,因为当容器停止时,该外部存储不会被移除. 决定如何为容器实现持久存储的第一步是确定您将使用的存储系统的基础类型.在这方面, 通常有三种主要选项:

对象存储、块存储、文件系统存储概念与区别

一.概念及区别 针对不同的应用场景,选择的分布式存储方案也会不同,因此有了对象存储.块存储.文件系统存储.这三者的主要区别在于它们的存储接口: 1.  对象存储: 也就是通常意义的键值存储,其接口就是简单的GET,PUT,DEL和其他扩展,如七牛.又拍,Swift,S3 2. 块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的

共享存储之分布式文件系统应用及MogileFS基础应用

 **什么是分布式存储:    分布式存储系统,是将数据分散存储在多台独立的设备上.传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要.分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性.可用性和存取效率,还易于扩展. 分布式文件系统设计目标: ** 访问透明** 位置透明** 并发透明** 失效透明** 硬件透明** 可扩展性** 复制

linux文件系统索引节点浅析

索引节点,Inode是Index Node的缩写,存储于文件系统上的任何文件都可以用索引节点来表示,所以也可以说索引节点是整个linux文件系统的基础.操作系统在读取硬盘的时候不是一个块一个块的来读取信息,因为这样做的话效率太低,文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者.文件的创建日期.文件的大小等等.这种储存文件元信息的区域就叫做inode,中文译名为"索引节点". 在Linux系统中,文件系统主要分为两部分,

Linux内核启动及根文件系统载入过程

上接博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令,就进入Linux内核启动阶段.与u-boot类似,普通Linux内核的启动过程也能够分为两个阶段,但针对压缩了的内核如uImage就要包含内核自解压过程了.本文以linux-2.6.37版源代码为例分三个阶段来描写叙述内核启动全过程.第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等,而第三阶段则主要为

Zynq Fatfs文件系统应用笔记

Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统采用在Bare-Metal和轻量级操作系统中常用的FatFs,版本为v0.10b. 在开始介绍FatFs文件系统在Zynq实现之前一定要先对FAT32文件系统有一个清晰的了解. 1 FAT32文件系统 应用笔记针对SD上的FAT32文件系统,在对文件系统作详细介绍之前,先回顾一下硬盘的结构,如图1: 图1 硬盘结构 对一个机械硬盘而

【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)

对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2)FileInputStream/FileOutputStream 此方式比较适合游戏的保存和使用,流文件数据存储可以保持较大的数据,而且通过此方式不仅能把数据存储在手机内存中,也能将数据保存到手机额SDcard中. (3)SQLite 此方式也适合游戏的保存和使用,不仅可以保存较大的数据,而且可以将

实现键值对存储(三):Kyoto Cabinet 和LevelDB的架构比较分析

译自  Emmanuel Goossaert (CodeCapsule.com) 在本文中,我将会逐组件地把Kyoto Cabinet 和 LevelDB的架构过一遍.目标和本系列第二部分讲的差不多,通过分析现有键值对存储的架构来思考我应该如何建立我自己键值对存储的架构.本文将包括: 1. 本架构分析的意图和方法 2. 键值对存储组件概览 3. Kyoto Cabinet 和LevelDB在结构和概念上的分析 3.1 用Doxygen建立代码地图 3.2 整体架构 3.3 接口 3.4 参数化

Linux内核启动及文件系统加载过程

上接博文<u-boot之u-boot-2009.11启动过程分析> 当u-boot开始执行bootcmd命令,就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也可以分为两个阶段,但针对压缩了的内核如uImage就要包括内核自解压过程了.本文以项目中使用的linux-2.6.37版源码为例分三个阶段来描述内核启动全过程.第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等,而第三阶段则主要为C代码,包括内核初始化的全部工作