一.Docker容器使用前其实有个非常重要的步骤就是规划好部署的磁盘区域,因为docker容器默认存储的路径是在/var/lib/docker的根目录内,随着使用时间越长部署的内容越多,基本的根目录的大小是不能完全满足的;所以最理想的状态是使用lvm逻辑卷管理,使用灵活的目录空间满足docker容器内容的存储。
关于修改docker容器存储的默认路径,目前是两种可以使用的方式:
1.使用ln软连接:停止docker服务后,把docker中的内容全部拷贝到指定的目录,然后删除docker目录,最后使用ln软连接到指定的目录

 ln -s /data/docker/dockerRoot /var/lib/docker

这样做的好处是不影响现有环境的配置,可以继续使用当前配置
2.使用--graph(简写-g)参数:停止docker服务后,把docker中的内容全部拷贝到指定的目录,在Centos系统中/etc/sysconfig/docker配置参数,指定存储的路径,但在docker17版本后centos已经没有/etc/sysconfig/docker配置文件,不过可以通过/etc/docker/daemon.json也可以生效。


配置完毕后可以通过docker info命令检查是否更换成功

二.存储驱动比较
目前在实际工作中遇到了两种不同的docker存储驱动,一个是版本较老的Device Mapper,还有一种是overlay。Device Mapper是docker低版本默认自带的存储驱动,会限制docker存储大小;在Linux内核内核3.18(实际服务器中3.10也可以使用)后可以默认使用overlay驱动存储。
1.Device Mapper
Device mapper是块级存储,所有的操作都是直接对块进行操作,而不是文件。Device mapper驱动会先在块设备上创建一个资源池,docker服务启动时默认会在/var/lib/docker/devicemapper/devicemapper/目录创建一个107.4G的data文件,然后启动的容器的所有变更的数据全部保存到这个data文件中;也就是说当容器内产生的相关data数据超过107.4G后容器就再也没有多余的空间可用,从而导致所有容器的根目录变为只读!同时它会限制每个容器最大为15.19GB。

2.overlay
Overlay是Linux内核3.18后支持的,Overlay2驱动只兼容Linux kernel4.0以上版本。overlay只有两层:一个upper文件系统和一个lower文件系统,分别代表docker的镜像层和容器层。当修改文件时,文件会从只读的lower层复制到可写的upper层进行修改,结果也保存在upper层。

3.Device Mapper对比overlay
Overlay是文件级存储,Device mapper是块级存储,当文件特别大而修改的内容很小,Overlay不管修改的内容大小都会复制整个文件,对大文件进行修改显示要比小文件要消耗更多的时间,而块级无论是大文件还是小文件都只复制需要修改的块,并不是整个文件,在这种场景下,显然device mapper要快一些。所以Device mapper适合IO密集的场景,而对于程序内部复杂,大并发但少IO的场景,Overlay的性能相对要强一些。

补充:Device mapper和overlay是不能兼容的驱动存储,如果要从device mapper切换到overlay需要重新部署docker容器。

Docker存储容易忽略的使用细节的更多相关文章

  1. Docker存储卷(V18.X)

    简介 介绍 Docker的存储卷称之为volume,本质上容器上的一个或者多个目录,而这些目录绕过了联合文件系统,与宿主机中的目录或者其他容器目录进行了绑定关系,这种绑定关系可以看作Linux的mou ...

  2. 理解Docker(8):Docker 存储之卷(Volume)

    (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 ...

  3. 理解Docker(7):Docker 存储 - AUFS

    (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 ...

  4. Docker存储驱动之OverlayFS简介

    简介 OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性: 1) 更简单地设计: 2) 从3.18开始,就进入了Linux内核主线: 3) 可能更快一些. ...

  5. Docker存储驱动之Device Mapper简介

    Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别, ...

  6. Docker存储驱动之总览

    简介 本文会介绍Docker存储驱动的特性,别列出现在已经支持的存储驱动,最后,会介绍如果选型适合你的存储驱动. 可插拔的存储驱动架构 Docker的存储驱动架构是可插拔的,可以让你很方便的将适合你环 ...

  7. Docker存储

    前言 上一篇文章中简单总结了一下docke的基础使用方法,这次我来总结一下有关docker存储方面的相关知识.本文同样建立在CloudMan的系列教程之上,有兴趣的可以直接移步. 有些人可能觉得这个很 ...

  8. Docker系列05—Docker 存储卷详解

    本文收录在容器技术学习系列文章总目录 1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加面成,启动容器时,docker会加载只读镜像层并在镜 ...

  9. 6、Docker存储卷

    Why Data Volumes?  来自马哥教育 Data volumes Volume types  绑定挂载卷:在宿主机和容器上各指明绑定路径才能进行绑定. docker管理卷:在容器内指定挂载 ...

随机推荐

  1. AKS素性检测

    2002年印度数学家Manindra Agrawal, Neeraj Kayal,Nitin Saxena 给出了一个是否为素数的判别准则. 定理一:设 $a$ 是于 $p$ 互素的整数,则 $p$ ...

  2. 2019牛客多校第五场 generator 1——广义斐波那契循环节&&矩阵快速幂

    理论部分 二次剩余 在数论中,整数 $X$ 对整数 $p$ 的二次剩余是指 $X^2$ 除以 $p$ 的余数. 当存在某个 $X$,使得式子 $X^2 \equiv d(mod \ p)$ 成立时,称 ...

  3. 00_UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: # <class 'django.contrib.auth.models.Group'> QuerySet.

    访问groups时,后端报警告 UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ...

  4. position:absolute 按钮左右分布:left:0 和 right:0 以及雪碧图

    问题:把两个a标签按钮 垂直居中,并且分别把两个按钮放在水平左右两边顶部1,祖父元素设定:position:relative2,把.arrow 设定上下垂直居中 position:absolute; ...

  5. JQuery 实践--扩展JQuery

    Why扩展JQuery通过扩展可以利用JQuery所提供的现有代码基础.避免从头编写代码 有效扩展JQuery的规则扩展JQuery的两种形式: $上直接定义实用工具函数 和JQuery包装集进行操作 ...

  6. 014_STM32程序移植之_L298N电机驱动模块

    更改注意: STM32程序移植之L298N电机驱动模块 引脚连接图 STM32引脚 L298N引脚 功能 PA6 ENA 马达A的PWM PA7 ENB 马达B的PWM PA2 IN1 控制马达A P ...

  7. MySQL Group Replication-MGR集群简介

    简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...

  8. 51Nod 1701 最后的机会

    1701 最后的机会 给定一字符串S,S非空,由小写字母组成,设v为S中元音字母的个数,c为辅音字母的个数."a", "e", "i", & ...

  9. 【Phoenix】1、搭建 Phoenix 环境

    Ps: 需要注意的是,我学习的时候,Elixir 是 1.8.1的版本,而 Phoenix 是 1.4.1的版本,对于其他版本,不一定正确. 1.安装 Phoenix 之前,先安装 Elixir. 2 ...

  10. docker安装mysql挂载外部配置和数据目录

    从docker hub上可以找到mysql外挂配置和数据目录的一些文档说明 https://hub.docker.com/_/mysql 从该文档中可以了解到,mysql的默认配置为/etc/mysq ...