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. input禁止输入后,触发事件,在苹果手机的页面会滚动

    在vue中,<input type="text" readonly="readonly" @click=""/>,点击跳转页面. ...

  2. 最短路问题 Dijkstra算法- 路径还原

    // 路径还原 // 求最短路,并输出最短路径 // 在单源最短路问题中我们很容易想到,既然有许多条最短路径,那将之都存储下来即可 // 但再想一下,我们是否要把所有的最短路径都求出来呢? // 实际 ...

  3. [CF1311C] Perform the Combo

    Solution 前缀和搞一下即可 #include <bits/stdc++.h> using namespace std; #define int long long const in ...

  4. NODEJS 搭建本地文件服务器

    npm install anywhere --g 然后再任意目录位置运行 anywhere 80 就可以开启服务器.

  5. 【Git】git使用 - 各种常用场景命令解决

    (多看git中的各种帮助-h/--help,可能有你想要的命令) 1.分支的创建和切换 创建 >>>> git branch branchName 切换分支 >>& ...

  6. too many open files异常及解决办法

    1.问题描述: 最近项目中由于大批量的操作文件,项目部署在Linux服务器上,突然发现出现了 too many open files异常. 经过一番查阅,(直译过来就是文件打开数过多)但是查阅了相关的 ...

  7. P1478 陶陶摘苹果(升级版)(sort(),时间优化,priority_queue)

    题目描述 又是一年秋季时,陶陶家的苹果树结了 n 个果子.陶陶又跑去摘苹果,这次他有一个 a 公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与 NOIp2005 普及组第一题不同的是:陶陶之 ...

  8. ES的性能优化

    ES的性能优化 es在数据量很大的情况下(数十亿级别)如何提高查询效率? 在es里,不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景.也许有的场景是你换个参数,或者调整一下语法,就可以搞定 ...

  9. 01、模拟ATM机界面程序

    一.概述 设计一个简单的模拟自动取款机ATM界面的程序,实现用户登录及取款等功能. 二.需求分析 (1)模拟自动取款机ATM界面,有常用功能. (2)主要功能包括;用户输入密码登录主界面.取款功能.取 ...

  10. 【spring boot】SpringBoot初学(2.1) - properties读取明细

    前言 算是对<SpringBoot初学(2) - properties配置和读取>的总结吧. 概念性总结 一.Spring Boot允许外化(externalize)你的配置.可以使用pr ...