一、容器数据卷是什么

1、为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷。因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了。

2、容器数据卷可以将容器中的数据持久化,并且实现容器之间的数据共享。

二、容器数据卷可以干什么

1、卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联合文件系统,因此能够绕过联合文件系统,提供一些用于持续存储或共享数据的特性。

2、卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。

3、特点:

(1)数据卷可以在容器之间共享或重用数据。

(2)卷中的更改可以直接生效。

(3)数据卷中的更改不会包含在镜像的更新中。

(4)数据卷的生命周期会一直持续到没有容器使用它为止。

三、添加数据卷

(一)直接命令添加

1、将宿主机目录 /myDataVolumn 复制到容器的目录 /dataVolumnContainer  ,如果目录不存在则自动创建:docker run -it -v /myDataVolumn: /dataVolumnContainer centos

2、无论在宿主机还是容器中修改文件,都会同步更新。当容器先停止退出,主机修改了文件,然后重新进入之前的容器,同样可以看到主机修改过的文件。即内容同步。

3、命令带权限,比如容器中的目录只读:docker run -it -v /myDataVolumn:/dataVolumnContainer:ro centos

4、如果docker挂载宿主机目录时访问出现问题:cannot open directory .:Permission denied,解决办法是:在挂载目录后多加一个 --privileged=true 参数即可。

 docker run -it -v /myDataVolumn: /dataVolumnContainer --privileged=true centos 

(二)dockerFile 添加

1、DockerFile是镜像模板的描述文件,在docker hub 官网上,查找镜像,然后点击进去,选择一个版本进去,就可以跳转到github,看到某软件镜像的DockerFile。

2、具体步骤:

(1)根目录下新建mydocker文件夹并进入

(2)可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷

  • VOLUME ['/dataVolumeContainer1','dataVolumeContainer2']
  • 出于可移植和分享的考虑,用-v 主机目录:容器目录 这种方法不能够直接在DockerFile中实现
  • 由于宿主机目录是依赖于特定宿主机的,并不能保证所有的宿主机都存在这样的特定目录,所以只加入容器目录

(3)编写DockerFile文件,案例:

# volume test
FROM centos
VOLUME ['/dataVolumeContainer1','dataVolumeContainer2']
CMD echo 'finished,------success1'
CMD /bin/bash

(4)build后生成新镜像,获得一个新镜像(以centos为例,一定要注意最后那个 “.”,即指定为当前的路径):

docker build -f /mydocker/DockerFile -t dyy/centos .

(5)查看docker给宿主机默认分配的容器卷目录:

docker inspect 容器ID,然后查看“Volumes”后面的信息,前一半是容器中的容器卷目录,后一半是宿主机中的容器卷目录(可能为空{})。

四、数据卷容器

(一)数据卷容器是什么

  容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称为数据卷容器。类似于移动硬盘通过移动硬盘传递数据。

(二)创建父容器,并挂载其他容器

  1、通过设定名称来指定父容器:docker run -it --name dc01 dyy/centos

  2、其他容器从父容器挂载,其他容器中新创建的资源,同时会在父容器、其他各容器之间共享:docker run -it --name dc02 --volumes-from dc01 dyy/centos

  3、把父容器 dc01 删除后,从父容器中继承以及新创建的文件,还会共享:docker rm -f dc01

   4、哪怕所有的容器都继承自dc01,把dc01删除后,各容器各自的修改,依然会共享。数据卷的生命周期会一直持续到没有容器使用它为止

docker学习笔记-04:docker容器数据卷的更多相关文章

  1. Docker小白到实战之容器数据卷,整理的明明白白

    前言 上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失.从隔离性的角度来看,数据就应该和容器共存亡:但 ...

  2. Docker系列(16)- 容器数据卷

    什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!新增一个需求:数据可以持久化 MySQL,容器删了等于删库跑路!新增一个 ...

  3. Docker学习笔记之Docker的数据管理和存储

    0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...

  4. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  5. Docker学习笔记之为容器配置网络

    0x00 概述 在互联网时代,网络已经成为绝大多数应用进行数据交换的主要通道,Docker 作为集群部署的利器,在网络支持上也下了许多功夫.功能丰富和强大,并不代表使用复杂,在 Docker 的封装下 ...

  6. docker学习笔记2:容器操作

    一.列出主机上已经创建的容器 docker ps -a 二.创建交互式容器 命令: docker run -i -t ubuntu /bin/bash 其中-i -t 表示创建一个提供交互式shell ...

  7. Docker学习笔记四 Docker容器

    本文地址:https://www.cnblogs.com/veinyin/p/10439849.html    容器是独立运行的一个或一组应用及他们的运行态环境,对应虚拟机的操作系统和应用. 启动 可 ...

  8. docker学习笔记2--对镜像/容器的命令操作

    Docker启动一个Centos镜像 我们下载完成一个Centos镜像之后,开始启动 docker run -d -i -t <imageID> /bin/bash 这样就能启动一个一直停 ...

  9. Docker学习笔记之进入容器Bash

    我们在创建容器的时候,如果容器的命令(command)不是/bin/bash的时候,使用docker attach命令是会卡住进不去容器的bash shell的.如下图所示: 所以,这里记录一个可以进 ...

随机推荐

  1. 常用FTP命令汇总

    FTP是File Transport Protocol的简称,其作用是使连接到服务器上的客户可以在服务器和客户机间传输文件.除WWW服务外,FTP也算是使用最广泛的一种服务了.在cmd中ftp命令很多 ...

  2. js 中一些重要的字符串方法

    String 对象方法 方法 描述 charAt() 返回在指定位置的字符. charCodeAt() 返回在指定的位置的字符的 Unicode 编码. concat() 连接两个或更多字符串,并返回 ...

  3. 学习笔记(4)- DQN

    宋皓宇 张伟男刘挺. (2018). 基于DQN的开放域多轮对话策略学习. 中文信息学报, 32(7), 99. http://jcip.cipsc.org.cn/CN/abstract/articl ...

  4. jdk动态代理和cglib动态代理底层实现原理超详细解析(jdk动态代理篇)

    代理模式是一种很常见的模式,本文主要分析jdk动态代理的过程 1.举例 public class ProxyFactory implements InvocationHandler { private ...

  5. 最近公共祖先(LCA)问题

    目录 最近公共祖先 1.向上标记法 2.树上倍增法 3.Tarjan算法 最近公共祖先 定义:给定一颗有根树,若结点 z 既是 x 的祖先,也是 y 的祖先,则称 z 是 x,y 的公共祖先.在 x, ...

  6. Linux命令:netstat命令

    netstat功能:显示网络连接情况 netstat功能选项 -t:tcp协议的连接 -u:udp协议的链接 -l:监听状态的连接 -a:所有状态的连接 -p:连接相关的进程 -n:数字格式显示 -r ...

  7. 时间和日期-<Date和SimpleDateFormat>

    第一步.定义一个Date //获取当前时间 Date now=new Date(); 第二步.定义一个SimpleDateFormat //规范时间格式 SimpleDateFormat date=n ...

  8. Entity Framework Migrations 数据迁移

    在使用Entity Framework 过程中,经常会遇到需要变更model 的状况,此时可以使用Migrations ,将每次变更记录以便后续更换机器或是运行在生产环境,持久层可保持一致. 在Pac ...

  9. 轉:StackOverflow2016最新架构探秘

    轉載:http://www.infoq.com/cn/news/2016/03/Stack-Overflow-architecture-insi?utm_source=tuicool&utm_ ...

  10. 操作Easy_UI案例以及模板

    操作easy_ui案例以及模板 https://pan.baidu.com/s/1dHfclwP  密码:jygk