一、容器数据卷是什么

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. lnmp1.5安装fileinfo扩展

    cd /usr/local/src cd lnmp1.-full/src tar xvf php-.tar.bz2 cd php-/ext/fileinfo phpize ./configure -- ...

  2. AbstractQueuedSynchronizer AQS源码分析

    申明:jdk版本为1.8 AbstractQueuedSynchronizer是jdk中实现锁的一个抽象类,有排他和共享两种模式. 我们这里先看排他模式,共享模式后面结合java.util.concu ...

  3. MD5 加密解密字符串

    方法1: using System.Text; using System.Security.Cryptography; public string Hash(string toHash) { MD5C ...

  4. Struts2学习(七)

    Servlet实现下载 1.Servlet 3.1之前实现文件上传 package ecut.request; import java.io.BufferedReader; import java.i ...

  5. development tool

    Eclipse :        https://www.eclipse.org/downloads/ WebStorm:   http://www.jetbrains.com/webstorm/do ...

  6. c++子类父类关系(翁恺c++公开课[15-16]学习笔记)

    关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...

  7. 第一次试水bof

    BOF come from https://www.jarvisoj.com/challenges nc pwn2.jarvisoj.com 9881(远程连接) 在ubuntu16.04上进行连接, ...

  8. 02-08Android学习进度报告八

    今天主要学习了昨天还没有学习完的Date & Time组件的知识. 首先是DatePicker(日期选择器) android:calendarTextColor : 日历列表的文本的颜色 an ...

  9. 李德胜系列——李德胜和CPC人的初心

    很久很久以前,有三条恶龙盘踞着村庄,恶龙们及其爪牙对村民敲骨吸髓,逼着村民卖儿鬻女.苦不堪言.但是村民们却对此压迫习以为常,逆来顺受. 后来,一个书生来到了这个村庄,告诉村民,不许跪,也没有人值得他们 ...

  10. 使用taglib指令在jsp页面导入要使用的jstl标签库

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>