一、容器数据卷是什么

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. 如果你是新晋的leader, 你可能需要了解这些。

    背景 在职业发展的道路上,我们总会面临这样的抉择: 是在技术的路上一条路走到黑,做技术专家 接触管理, 走上管理 年龄大了,搬砖没人要,转型 or 去公司楼下卖炒粉 我曾经有个小小的愿望: 在毕业5年 ...

  2. python时间序列按频率生成日期的方法

    引用:https://www.zhangshengrong.com/p/281omE7rNw/ 有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pan ...

  3. 在javaweb中对于session的使用

    1.初次调用session时: String username="student"; HttpSession session=request.getSession(true);// ...

  4. GO测试

    测试 Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成. 你可以通过创建一个名字以 _test.go 结尾的,包含名为 TestXXX 且签名为 func (t *t ...

  5. [HEOI 2013]SAO

    Description 题库连接 给你一个 \(n\) 个节点的有向树,问你这棵树的拓扑序个数,对大质数取模.多测,测试组数 \(T\). \(1\leq n\leq 1000, 1\leq T\le ...

  6. Java如何实现序列化,有什么意义?

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States, 但是Java给你提供一种应该 ...

  7. Spring MVC原理解析

    SpringMVC Spring MVC的工作原理 ①客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求. ② Dispatche ...

  8. 如何用python写个人专属群聊提醒小助手?

    前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚生 ...

  9. Tensorflow之AttributeError: module 'tensorflow' has no attribute 'mul'

      tf.mul已经在新版本中被移除,请使用 tf.multiply 代替

  10. Servlet(1):request和response对象

    1.Servlet的生命周期 /** * Servlet的生命周期: * 1.从第一次调用到服务器关闭. * 2.如果Servlet在web.xml中配置了load-on-startup,生命周期为从 ...