记录 Docker 的学习过程 (数据挂载)
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 的学习过程 (数据挂载)的更多相关文章
- 记录 Docker 的学习过程 (单机编排)
容器的编排 什么是容器的编排?就是让容器有序的启动并在启动的过程加以控制 docker-compose -f bainpaiwenjian.yul up 如果编排文件为默认名称docker-compo ...
- 记录 Docker 的学习过程 (日志篇)
日志收集 elk 在node3上操作 docker pull sebp/elk:5610 node3# sysctl vm.max_map_count=262144 node3# docker run ...
- 记录 Docker 的学习过程 (网络篇)
打开2个会话,分别运行以下命令 # docker run -it -P --name nginx2 nginx #-P 端口随机映射 再打开一个会话查看 运行中的容器 # docker ps -aCO ...
- 记录 Docker 的学习过程 (自建私有仓库)
私有仓库的创建 node1#wget http://harbor.orientsoft.cn/harbor-v1.4.0/harbor-offline-installer-v1.4.0.tgz nod ...
- 记录 Docker 的学习过程 (dockerfile自动制作镜像)
自动制作镜像 通过编写dockerfile来自动创建镜像 #vi Dockerfile #编辑dockerfile文件,一定要以这个名字命名 #cat Dockerfile #导入哪个基础镜像FROM ...
- 记录 Docker 的学习过程 (网络篇之跨主机互通)
下面从node3上操作node3# docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap node3# ...
- 记录 Docker 的学习过程 (安装基础篇)
docker 通过内核来实现 特点是效率高 1. centos7 三台(推荐2c 4g 最低 1c1g)2. 关闭防火墙 selinux3. 做好主机名解析,三台能互相ping通主机名host参考文件 ...
- Docker数据挂载
Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...
- docker安装mysql5.7 数据挂载
docker安装mysql5.7,并数据卷挂载到主机 # docker 中下载 mysql docker pull mysql:5.7 #启动 docker run --name mysql3306 ...
随机推荐
- R12客户表结构分析
客户表/联系人/PARTY关联 HZ_PARTIES 客户账户表 HZ_CUST_ACCOUNTS 例子: select hp.party_number --客户注册标识 ...
- Android 日期选择框 简洁常用
效果 核心代码 >方法 /** * @description 选择日期弹出框 * @param listener 选择日期确定后执行的接口 * @param curDate 当前显示的日期 * ...
- 开源版 nignx 不支持 ntml 验证
最近在一个环境相对比较复杂(F5+nginx)的项目中部署系统,系统要集成windows域验证来实现单点登录(即使用windows账户直接登录系统,不用输入账号密码).这里就遇到问题了,域认证很不稳定 ...
- gcc 与g++
which gcc 查看gcc 主要针对 .c which g++ 查看g++ 主要针对 .cpp yum install gcc 安装gc ...
- 虚拟机安装_1_wincc_matriton
1,安装虚拟机: 选择:win7专业版64位ISO. 2,安装office2016 3,激活系统和OFFICE 4,安装winccV7.4 4.1 安装WINDOWS组件 MSMQ 4.1.1 安装I ...
- Julia 入门学习教程
有一门语言,它看起来像 Python ,感觉起来像 Lisp ,运行起来又像 C 一样快速,他就是Julia. 近年来,Julia 语言已然成为编程界的新宠,尤其在科学计算和人工智能领域炙手可热. 据 ...
- 第1章.Collections类、泛型类和Timing类概述
1.1 群集(collection)的定义 群集是一种结构化的数据类型.它存储数据,并且提供数据的添加.删除.更新操作,以及对群集的不同属性值的设置与返回操作. 群集可以分为两类:线性的和非线性的. ...
- [PKUWC2018]Minimax [dp,线段树合并]
好妙的一个题- 我们设 \(f_{i,j}\) 为 \(i\) 节点出现 \(j\) 的概率 设 \(l = ch[i][0] , r = ch[i][1]\) 即左儿子右儿子 设 \(m\) 为叶子 ...
- B. Modulo Equality
当时想到的第一个想法是用拓展欧几里得解方程,求x的最小正解.一发交了之后发现爆long long,因为m是1e9. 因此本题的正解是暴力,保证有解的情况下,那么a数组中的一个数必然对应着b数组中的一个 ...
- 小白的java学习之路 “ 变量、数据类型和运算符”
一.变量: 1.什么是变量? 变量是一个数据存储空间的表示 变量由:变量名 变量类型 变量的值 2.创造变量的两种方法: 1.声明-->赋值-->取值 //声明变量 int money ...