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. SAP 序列号与库存关联起来?

    SAP 序列号与库存关联起来? SAP系统标准功能可以实现序列号管理.其系统配置也不复杂,但是不少企业却使用不起来.笔者参与的诸多项目里,只有现在所在的项目里有启用序列号管理.基于项目客户所在行业,以 ...

  2. hadoop3自学入门笔记(2)—— HDFS分布式搭建

    一些介绍 Hadoop 2和Hadoop 3的端口区别 Hadoop 3 HDFS集群架构 我的集群规划 name ip role 61 192.168.3.61 namenode,datanode ...

  3. js中(function(){})()的写法用处

    直到今天我才明白的一个玩意!!! 来来来,首先嘛,JS中函数有两种命名方式 1.一种是声明式. 而声明式会导致函数提升,function会被解释器优先编译.即我们用声明式写函数,可以在任何区域声明,不 ...

  4. Git操作:绑定上传已存在的仓库到Github

    之前使用github都是创建一个全新的仓库,然后clone下来用,但如果我已经有一个正在使用的仓库,想要绑定上传已存在的仓库到github,怎么做呢?其实在github创建仓库的时候会提示: …or ...

  5. [SDOI2018]反回文串

    题意 问有多少个长度为\(N\)且字符集大小为\(K\)的字符串可以通过回文串旋转 (把第一个字符移到最后)若干次得到.\(K\le N≤10^{18}\) 做法 ARC64F的加强版 设\(h(d) ...

  6. AMBA简介

    AMBA AMBA(Advanced Microcontroller Bus Architecture)先进的微控制器总线架构是一个免费.开放的标准,用于SoC内部功能模块之间的互连和管理.对成功设计 ...

  7. Java获取IP地址,IpUtils工具类,Java IP地址获取

    ================================ ©Copyright 蕃薯耀 2020-01-17 https://www.cnblogs.com/fanshuyao/ import ...

  8. Picture POJ - 1177 线段树+离散化+扫描线 求交叉图像周长

    参考  https://www.cnblogs.com/null00/archive/2012/04/22/2464876.html #include <stdio.h> #include ...

  9. JVM和线程池

    本文链接:https://blog.csdn.net/liuwenliang_002/article/details/90074283 ————————————————版权声明:本文为CSDN博主「3 ...

  10. 小白的java学习之路 “ 选择结构(二)”

    switch 选择结构: 为什么使用switch选择结构: switch选择结构可以更好地解决等值判断问题. switch选择结构的四个关键字: switch    case    default   ...