5、docker容器数据卷: -v添加共享传递容器数据卷
1、是什么
1、docker理念
先来看看Docker的理念:
* 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
* 容器之间希望有可能共享数据
2、保存数据用卷
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,
那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
3、数据持久化
一句话:有点类似我们Redis里面的rdb和aof文件
容器中的数据持久化,比如保存到硬盘,保存到mysql
容器数据卷--类似硬盘,做数据持久化的
2、能干嘛
1、卷
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
2、特点
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
3、数据持久化、共享
容器的持久化
容器间继承+共享数据
也可完成主机到容器,容器到主机
3、添加数据卷:直接命令
容器内添加
1、直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

docker ps
dccker run -it -v /rootVolume:/dockerVolumen centos # 解释
docker run -it 镜像名
-v volumen 容器卷 docker run -it -v / :/
两边都没有
刷新,两边都生成了
虚拟机

docker


2、查看数据卷是否挂载成功
docker inspect 容器ID
# test
docker ps
docker inspect 3434kjl
已经挂载成功
绑定成功


3、容器和宿主机之间数据共享

docker创建docker.txt

root可以看到docker.txt,再创建root.txt


docker也可以看到root.txt

4、容器停止退出后,主机修改后数据是否同步

退出容器,关闭容器

虚拟机,创建roottest

启动容器,查看是否存在roottest


6、命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
# ro readonly
问题1: 哪边只读、???

问题2:上一个docker是true,如果是False呢

删除2个目录失败,详细见下节。
关闭docker,重新run一个

root,创建文件,写入内容

docker,不能写入,不能创建

所以:只允许主机单侧的读写,不允许容器 写


7、--privilege=true
备注:
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可

docker run -it -v /rootVolume:/dockerVolume:ro --privileged=true centos
问题3:遇到的问题: 删除两边目录

error:rm: cannot remove 'dockerVolume/': Device or resource busy
umount: /dockerVolume: must be superuser to unmount.


原因:
在docker run 的时候默认是"unprivileged“的,只能删除该容器,重新做。
下次再在docker run 的时候必须加上 --privileged,才能进行上面的操作
参考:
https://stackoverflow.com/questions/24614513/can-not-unmount-a-device-using-umount-in-docker

4、添加数据卷:DockerFile
1、DockerFile是什么

tomcat的DockerFIle
Docker镜像的描述脚本
2、mkdir /mydocker
(1)根目录下新建mydocker文件夹并进入
本地机器
mkdir /mydocker
(2)可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
说明:
出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
有时候这个目录,在别的机器不存在
2、vim DockerFile
File构建

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
解释
# 解释
centos镜像
两个容器卷
打印success
shell /bin/bash
等价于
docker run -it -v /host:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash

3、build后生成镜像
获得一个新镜像zzyy/centos


docker build -f /mydocker/Dockerfile -t zzyy/centos .
# 重点
最后有个. 当前目录
分成很多层
docker images
docker images zzyy/centos
4、run容器
docker run -it zzyy/centos /bin/bash
pwd
ls
存在

5、 主机对应默认地址
通过上述步骤,容器内的卷目录地址已经知道 对应的主机目录地址哪??
没有指定宿主机的
默认路径
/dataVolument: /var/lib/docerk/volumen/433524324234234234324324
# 容器
cd dataVolument
touch docker.txt # 宿主机
docker ps
docker inspect 3443kdfg
[root@localhost ~]# cd /var/lib/docker/volumes/7820ff68d42d62ccb1db0b16b82cb82f28348b43f80d1a106aac15364ac09be8/_data
[root@localhost _data]# ls
docker.txt
[root@localhost _data]#
[root@localhost _data]# touch root.txt
# 容器
[root@6f1b82355834 dataVolumeContainer1]# ls
docker.txt root.txt


4、数据卷容器
1、是什么
(1)数据卷,持久化的东西
(2)一条绳子上的蚂蚱
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
(3)活动硬盘上挂活动硬盘,实现数据的传递依赖
(4)通俗的说
班长的活动硬盘,挂载在我这。实现主机到容器,容器到主机
1组2组的活动硬盘挂载在班上上
实现传递共享
2、总体介绍
以上一步新建的镜像zzyy/centos为模板并运行容器dc01/dc02/dc03
它们已经具有容器卷
/dataVolumeContainer1
/dataVolumeContainer2
3、容器间传递共享(--volumes-from)
(1)先启动一个父容器dc01
在dataVolumeContainer2新增内容
docker ps
None
docker run -it --name dc01 zzyy/centos # 指定NAMES
ll
cd dataVolument
touch dc01add.txt
crl + q+ p

(2)dc02/dc03继承自dc01
--volumes-from
dc02/dc03分别在dataVolumeContainer2各自新增内容
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
#--volumes-from 继承与dc01 cd /datavolume
ll 存在 dc01add
touch dc02add
ctrl + q+ p # dc03 同理

(3)回到dc01可以看到02/03各自添加的都能共享了
docker attach dc01
cd DataVolument
ll # 都存在
# 父到子,子到父,传递共享

(4)删除dc01,dc02修改后dc03可否访问
docker ps
docker rm -f dc01
# 干掉父 docker ps
docker attach dc02
pwd
ll
#3个都存在 touch dc02update
ll
ctrl + q +p # 现在没有1了,在2上修改,3能看到吗 docker ps
docker attach dc03
pwd
ll
# 4个都存在

(5)删除dc02后dc03可否访问

(6)再进一步,新建dc04继承dc03后再删除dc03

4、结论:一条绳上的蚂蚱
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
5、docker容器数据卷: -v添加共享传递容器数据卷的更多相关文章
- 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证
[源码下载] 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证 作者:webabcd 介绍背水一战 Windows 10 之 用户和账号 数 ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。
Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原. 数据卷就是数据(一个文件或者文件夹). Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周 ...
- Centos7——docker持久化存储和卷间状态共享(笔记)
docker持久化存储和卷间状态共享(笔记) 本章介绍 存储卷的介绍 存储卷的两种类型 宿主机好额容器之间如何共享数据 容器之间如何共享数据 存储卷的声明周期 存储卷之间的数据管理和控制模式 就像在 ...
- Docker-使用数据卷在宿主机和容器间的数据共享
场景一:现在用Docker创建了N个容器,但是这些容器之间需要数据共享,这个时候我们应该怎么办?[参考第四步] 场景二:docker创建了一个容器并进入容器,添加了一些定制功能,此时除了用docker ...
- docker学习笔记(3)——联合文件系统与数据卷
参考资料: 1.官网教程:https://docs.docker.com/reference/ 2.视频教程:https://www.bilibili.com/video/BV1og4y1q7M4?t ...
- 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...
- docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置
原文:docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_3767485 ...
- aliyun添加数据盘后的物理分区和lvm逻辑卷两种挂载方式
一.普通磁盘分区管理方式 1.对磁盘进行分区 列出磁盘 # fdisk -l # fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Change ...
随机推荐
- Spring mybatis源码篇章-Mybatis的XML文件加载
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-Mybatis主文件加载 前话 前文主要讲解了Mybatis的主文件加载方式,本文则分析不使用主文件加载方式 ...
- 从 .NET 到 JavaScript —— 纯前端报表控件 ActiveReportsJS 焕新登场
报表工具的发展史,最早可以追溯到微软报表SSRS(SQL Server Reporting Services)时期.最初,报表工具主要应用于报表的定制.呈现和输出.经过几十年的发展,随着各种业务系统功 ...
- Python 解LeetCode:23. Merge k Sorted Lists
题目描述:把k个排序的链表组成的列表合并成一个排序的链表 思路: 使用堆排序,遍历列表,把每个列表中链表的头指针的值和头指针本身作为一个元素放在堆中: 第一步中遍历完列表后,此时堆中最多会有n个元素, ...
- IT学习的计算机网络内容
1.一种结构:数据结构 参考书目:<大话数据结构>.<数据结构(C#语言描述)>.<剑指Offer> ①线性表部分: 线性表(上){ 数组.ArrayList } ...
- 多线程学习:win32多线程编程基本概念(转)
一.定义: 1.进程和线程的区别 进程:是程序的执行过程,具有动态性,即运行的程序就叫进程,不运行就叫程序 ,每个进程包含一到多个线程.线程:系统中的最小执行单元,同一进程中有多个线程,线程可以共享资 ...
- 数据分析—win7+ipython+notebook安装
先安装python 3.x 然后 cmd 执行 pip3 ipython 然后 cmd 执行 pip3 install jupyter notebook 然后 cmd 执行 jupyter noteb ...
- shell习题第17题:检测磁盘
[题目要求] 写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时候,发邮件提醒 [核心要点] df d ...
- Docker搭建Gitlab代码管理平台
一.Gitlab的安装 宿主机环境: CentOS 7 docker docker-compose 1.查找镜像 docker search gitlab 2.拉取镜像 docker pull git ...
- ES6入门十:iterator迭代器
迭代模式 ES6迭代器标准化接口 迭代循环 自定义迭代器 迭代器消耗 一.迭代模式 迭代模式中,通常有一个包含某种数据集合的对象.该数据可能存在一个复杂数据结构内部,而要提供一种简单的方法能够访问数据 ...
- ONNX预训练模型加载
tvm官网中,对从ONNX预训练模型中加载模型的教程说明 教程来自于:https://docs.tvm.ai/tutorials/frontend/from_onnx.html#sphx-glr-tu ...