docker 存储篇

容器中的存储是分层的,

在容器中,如果我们要创建一个文件,会在文件的最上层(可写层)创建

容器中内置的文件,默认来讲是只读的,只有自己创建的文件才是可写状态

比如说 /etc/passwd 文件,这个文件在容器的最上层(可写层)是不存在的(并不是用户创建,而是镜像中自带的),所以在读取文件时会一层一层向下读入,当发现一个文件后,会将这个文件读取到可写层供用户操作

修改操作和读操作一样,都是一层一层的读取,最后复制到可写层供用户操作

删除则会从上向下操作,先在可写层删除,然后再容器中做个标记,标记文件已经删除了,不需要再向下层去寻找

所以容器镜像会很小,因为只保存用户修改的数据,默认的都是从系统里读取

无论数据卷还是数据卷容器,存在的目的都是为了让容器数据持久化的,不会因为容器的消失,导致数据丢失,就是一个供容器读写的特殊目录

数据卷

node1 # docker run -it --rm -v /opt/data centos bash #使用-v挂载一个目录
[root@84629e87173e /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 5.5G 71G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 xfs 76G 5.5G 71G 8% /opt/data
tmpfs tmpfs 991M 0 991M 0% /proc/asound
tmpfs tmpfs 991M 0 991M 0% /proc/acpi
tmpfs tmpfs 991M 0 991M 0% /proc/scsi
tmpfs tmpfs 991M 0 991M 0% /sys/firmware

node1 # docker run -it --rm -v /opt/data:/opt centos bash #使用-v 加上冒号 隐藏实际挂载目录

[root@92f517b5273b /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 5.5G 71G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 xfs 76G 5.5G 71G 8% /opt
tmpfs tmpfs 991M 0 991M 0% /proc/asound
tmpfs tmpfs 991M 0 991M 0% /proc/acpi
tmpfs tmpfs 991M 0 991M 0% /proc/scsi
tmpfs tmpfs 991M 0 991M 0% /sys/firmware

如果在容器内部创建用户,则推荐使用-u 指定uid从后向前的方式创建,以免造成文件权限混淆

[root@92f517b5273b /]#useradd -u 9999 newuser

多个容器可以共用一个宿主机目录挂载,这样可以实现文件共享

数据卷容器

node1 # docker run -it -v /opt/data --name mydata centos bash #先创建一个容器挂在宿主机的/opt/data目录

再打开一个会话 继续新建一个容器

node1# docker run -it --volumes-from mydata --name computer1 centos #--volumes-from mydata 指定从哪里容器挂载卷
[root@d0011a1631c9 /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 5.5G 71G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 xfs 76G 5.5G 71G 8% /opt/data
tmpfs tmpfs 991M 0 991M 0% /proc/asound
tmpfs tmpfs 991M 0 991M 0% /proc/acpi
tmpfs tmpfs 991M 0 991M 0% /proc/scsi
tmpfs tmpfs 991M 0 991M 0% /sys/firmware

[root@d0011a1631c9 /]# ls /opt/data/ #可以查看到mydata创建的file1文件
file1

此时将mydata容器关闭

[root@c5a09e5d8e87 data]# exit

这个时候在computer1容器上再次ls 是否还可以看到 file1 呢

[root@d0011a1631c9 /]# ls /opt/data/
file1
答案是可以的,如果将mydata容器直接删除,仍然可以查看到file1

上面的这些通过挂载生成的容器在删除时要使用-v参数 即 docker rm -v 容器id
否则会产生垃圾文件
docker volume ls #查看docker volume 信息

docker volume --prune #删除不再使用volume信息 慎用

记录 Docker 的学习过程 (数据挂载)的更多相关文章

  1. 记录 Docker 的学习过程 (单机编排)

    容器的编排 什么是容器的编排?就是让容器有序的启动并在启动的过程加以控制 docker-compose -f bainpaiwenjian.yul up 如果编排文件为默认名称docker-compo ...

  2. 记录 Docker 的学习过程 (日志篇)

    日志收集 elk 在node3上操作 docker pull sebp/elk:5610 node3# sysctl vm.max_map_count=262144 node3# docker run ...

  3. 记录 Docker 的学习过程 (网络篇)

    打开2个会话,分别运行以下命令 # docker run -it -P --name nginx2 nginx #-P 端口随机映射 再打开一个会话查看 运行中的容器 # docker ps -aCO ...

  4. 记录 Docker 的学习过程 (自建私有仓库)

    私有仓库的创建 node1#wget http://harbor.orientsoft.cn/harbor-v1.4.0/harbor-offline-installer-v1.4.0.tgz nod ...

  5. 记录 Docker 的学习过程 (dockerfile自动制作镜像)

    自动制作镜像 通过编写dockerfile来自动创建镜像 #vi Dockerfile #编辑dockerfile文件,一定要以这个名字命名 #cat Dockerfile #导入哪个基础镜像FROM ...

  6. 记录 Docker 的学习过程 (网络篇之跨主机互通)

    下面从node3上操作node3# docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap node3# ...

  7. 记录 Docker 的学习过程 (安装基础篇)

    docker 通过内核来实现 特点是效率高 1. centos7 三台(推荐2c 4g 最低 1c1g)2. 关闭防火墙 selinux3. 做好主机名解析,三台能互相ping通主机名host参考文件 ...

  8. Docker数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...

  9. docker安装mysql5.7 数据挂载

    docker安装mysql5.7,并数据卷挂载到主机 # docker 中下载 mysql docker pull mysql:5.7 #启动 docker run --name mysql3306 ...

随机推荐

  1. 盒模型大小取决于它的padding,margin,border数值

    盒模型规定了元素框处理元素内容width与height值.内边距padding.边框border 和 外边距margin 的数值大小.边框内的空白是内边距padding,边框外的空白是外边距margi ...

  2. Centos7内核版安装nginx环境问题及解决方法

    错误信息:./configure: error: C compiler cc is not found解决方案:yum -y install gcc gcc-c++ autoconf automake ...

  3. C# 调用WCF服务的两种方法

    项目简介 之前领导布置一个做单点登录的功能给我,实际上就是医院想做一个统一的平台来实现在这个统一的平台登录后不需要在His.Emr.Lis等系统一个个登录,直接可以登录到对应的系统,然后进行相应的操作 ...

  4. idea 工具 听课笔记 首页

    maven 创建 javaWeb站点结构标准及异常权限调整 解决Intellij Idea下修改jsp页面不自动更新(链接 idea中使用github  提交 idea 从github.com上恢复站 ...

  5. 剑指offer-面试题50-第一个只出现一次的字符-哈希表

    /* 题目: 求字符串第一个只出现一次的字符. */ /* 思路: 使用map遍历两次,第一次计数,第二次找到计数为1的第一个字符. */ #include<iostream> #incl ...

  6. ie8兼容rgba写法

    ie使用filter解决半透明兼容性问题 filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#19ffffff,endCo ...

  7. [CF1311E] Construct the Binary Tree - 构造

    Solution 预处理出 \(i\) 个点组成的二叉树的最大答案和最小答案 递归做,由于只需要构造一种方案,我们让左子树大小能小就小,因此每次从小到大枚举左子树的点数并检验,如果检验通过就选定之 现 ...

  8. leetcode再次总结

    注释 testcases (1)简单一想O(n)算法,有可能通过二分查找变形优化成log(n) (2)双指针:一快一慢 一静一动(数组中最小的长度满足条件,常常用于,确定了一个范围,然后一个指针静止, ...

  9. Navicat Premium15安装与激活(破解)

    Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让管理不 ...

  10. JN_0012:win10的开机启动文件夹

    1,登录所有用户时都能开机启动的启动文件夹.所有用户通用的开机启动文件夹地址是 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp ...