Docker容器数据卷(七)
Docker致力于:
- 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
- 容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。
一、容器数据卷能做什么
卷(volume)就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
二、容器内添加数据卷
1. 直接命令添加
- # docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
- # myDataVolume和dataValumeContainer由Docker自建
- docker run -it -v /myDataVolume:/dataValumeContainer centos
- # 如果想要创建多个容器卷, 则 -v /宿主机绝对路径目录:/容器内目录 这个选项多添加多个
- # 查看数据卷是否挂载成功
# docker inspect 容器ID
# "Binds": [ # "/myDataVolume:/dataValumeContainer" # ]
(1) 容器和宿主机之间数据共享
在容器中创建一个文件:
在宿主机器中查看,发现同样存在一个文件:
(2) 容器停止退出后,主机修改后数据是否同步
- 现在容器终端中输入停止且退出命令:exit
- 在宿主机器终端中修改文件内容
- 重新启动容器
- 查看数据卷的内容
(3) 带权限的数据卷
- # docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
- # 以下这个命令表示容器卷的内容只读不可写
- docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
在容器中创建文件,提示没有权限:
修改主机同步到容器的文件,提示:
2. Dockerfile添加
在 公共仓库 https://hub.docker.com/ 搜索镜像,可以找到Dockerfile,方便借鉴。
(1) 根目录下新建mydocker文件夹并进入
(2) Dockerfile构建,可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
- # 第一步:编写Dockerfile
# filename Dockerfile- # volume test
- # 相当于从centos镜像继承
- FROM centos
- # 在容器内创建两个数据卷
- VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
- # 执行 输出命令
- CMD echo "finished,--------success1"
- # 执行 进入终端
- CMD /bin/bash
- # 第二步:build后生成镜像
- # docker build [-f Dockerfile Path] -t 镜像名 .
# 最后有一个.,表示当前目录
docker build -f /mydocker/Dockerfile -t linhw/centos .
出现上面的信息,则docker build成功,使用docker images可以查看我们刚才构建的镜像。
(3) docker run容器
可以发现一启动容器,就在容器创建了两个数据卷。
那这两个数据卷对应的宿主机器的目录是什么呢?可以使用 docker inspect 镜像ID 查看。
备注:
若Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
- docker run -it -v /myDataVolume:/dataValumeContainer --privileged=true centos
三、数据卷容器
1. 数据卷容器是什么
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
2. 演示步骤
以之前新建的镜像linhw/centos为模板并运行容器dc01/dc02/dc03,它们已经具有两个容器卷dataVolumeContainer1和/dataVolumeContainer2
(1) 运行容器dc01,并在/dataVolumeContainer2创建一个dc01-add.txt文件
- docker run -it --name dc01 linhw/centos
- cd dataVolumeContainer2
- touch dc01-add.txt
(2) 以继承dc01的方式启动容器dc02
- # --volumes-from dc01 继承dc01
- docker run -it --name dc02 --volumes-from dc01 linhw/centos
查看容器dc02下的/dataVolumeContainer2,发现存在dc01-add.txt文件。
在/dataVolumeContainer2添加dc02-add.txt。
(3) 以继承dc01的方式启动容器dc03
- # --volumes-from dc01 继承dc01
- docker run -it --name dc03 --volumes-from dc01 linhw/centos
查看容器dc03下的/dataVolumeContainer2,发现存在dc01-add.txt和dc02-add.txt文件。
在/dataVolumeContainer2添加dc03-add.txt。
(4) 回到dc01可以看到dc02/dc03各自添加的都能共享了,在dc02或dc03也能看到添加的文件都在,即每个容器的数据是所有容器数据的总和。
(5) 删除dc01后,dc02和dc03的文件都还存在,可以访问。
(6) 删除dc01后,修改dc02,dc03也可以实现数据共享和传递。
(7) 删除dc02后,dc03依然可以访问。
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
Docker容器数据卷(七)的更多相关文章
- 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...
- docker 12 docker容器数据卷
数据卷概念 ♣我们知道,当我们把一个运行中的容器关闭后,容器里的数据就没有了(如果你做了docker commit操作,数据会保留到新的镜像里面).所以我们就需要用容器数据卷把容器数据进行持久化储存. ...
- Docker容器数据卷
⒈Docker容器中数据如何持久化? ①通过commit命令使容器反向为镜像 ②以容器数据卷的方式将数据抽离 ⒉容器数据卷的作用? ①容器数据的持久化 ②容器间继承.共享数据 ⒊能干嘛? 卷就是目录或 ...
- 5、docker容器数据卷: -v添加共享传递容器数据卷
1.是什么 1.docker理念 先来看看Docker的理念:* 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的* 容器之间希望有可能共享数据 2.保 ...
- Docker 容器数据卷(Data Volume)与数据管理
卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...
- Docker容器数据卷-Volume详解
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享.数据 ...
- docker学习笔记-04:docker容器数据卷
一.容器数据卷是什么 1.为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷.因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了 ...
- 『现学现忘』Docker基础 — 29、Docker容器数据卷的应用
目录 1.验证容器和宿主机之间数据共享 2.容器停止退出后,主机修改后数据是否同步 3.带只读权限的挂载数据卷 1.验证容器和宿主机之间数据共享 通过上面的操作,接下来我们演示一下通过数据卷的挂载,实 ...
- Docker——容器数据卷
为什么需要容器数据卷 角度:遇到问题,尝试以朴素的道理解决问题.问题复杂化,解决的方式也变得复杂 问题的提出:docker将应用和环境打包成一个镜像,但是对于容器内的数据,如果不进行外部的保存,那么当 ...
随机推荐
- 洛谷 AT1350 深さ優先探索
洛谷 AT1350 深さ優先探索 洛谷传送门 题意翻译 高桥先生住的小区是长方形的,被划分成一个个格子.高桥先生想从家里去鱼店,高桥先生每次可以走到他前后左右四个格子中的其中一个,但不能斜着走,也不能 ...
- 42 在Raspberry Pi上安装dlib表情识别
https://www.jianshu.com/p/848014d8dea9 https://www.pyimagesearch.com/2017/05/01/install-dlib-raspber ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- 360安全浏览器右击不显示审查元素 或按F12不弹出开发人员工具的原因和解决方法:设为极速模式
IE兼容模式 会显示 IE的开发人员工具 极速模式 才会显示谷歌的那种方式 IE调试模式不怎么习惯,如下图 正常调试模式如下图
- [LOJ 6213]「美团 CodeM 决赛」radar
[LOJ 6213]「美团 CodeM 决赛」radar 题意 给定 \(n\) 个横坐标 \(x_i\) , 为它们选择一个不超过 \(y_i\) 的纵坐标 \(h_i\), 产生 \(c_ih_i ...
- C# 位运算基本大全
1.原码 反码 补码 只用补码进行计算,且没有减法.只有用补码进行加法运算,具体原因,详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/C ...
- APP兼容性测试 (一) 机型选择概要
一.App兼容性问题有哪些 安装失败.启动失败.卸载失败,卸载不干净. 程序运行过程中闪退 部分控件显示不完整或者功能失效 屏幕显示异常 图片展示不全等 二.App兼容性测试的核心要点 测试软件是否能 ...
- 【前端知识体系-JS相关】深入理解JavaScript原型(继承)和原型链
1. Javascript继承 1.1 原型链继承 function Parent() { this.name = 'zhangsan'; this.children = ['A', 'B', 'C' ...
- redis之线程IO模型
非阻塞 IO 当我们调用套接字的读写方法,默认它们是阻塞的,比如 read 方法要传递进去一个参数n,表示读取这么多字节后再返回,如果没有读够线程就会卡在那里,直到新的数据到来或者连接关闭了,read ...
- python学习笔记 - socket通信
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...