1、什么是Docker容器数据卷

Docker容器数据卷,即Docker Volume(卷)。

当Docker容器运行的时候,会产生一系列的数据文件,这些数据文件会在关闭Docker容器时,直接消失的。但是其中产生部分的数据内容,我们是希望能够把它给保存起来,另作它用的。

所以我们期望:

  • 将应用与运行的环境打包形成容器运行,伴随着容器运行产生的数据,我们希望这些数据能够持久化。
  • 希望容器之间也能够实现数据的共享。

根据我们之前所学,Docker容器产生的数据,如果不通过docker commit命令生成新的镜像,把数据做为镜像的一部分保存下来。那么当容器删除后,数据自然也就没有了。但为了能保存Docker容器中的数据,Docker为我们提供了卷技术(Volume)。

总结:Docker容器中产生的数据,同步到本地,这就是卷技术。也就是通过目录的挂载,将容器内的目录,挂载到Linux系统上面,实现容器数据的持久化。

2、数据卷的作用

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

数据卷的设计目的就是为了Doeker容器中数据的持久化,完全独立于容器的生存周期,Docker不会在容器删除时,删除其挂载的数据卷。

数据卷:

  1. 数据卷可在容器之间共享或重用数据。
  2. 数据卷中的更改可以直接生效。
  3. 数据卷中的更改不会包含在镜像的更新中。
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

3、数据卷的使用

使用-v参数给容器添加数据卷,Volume(卷)的首字母。

我们以CentOS容器为例进行演示。

步骤1:下载CentOS镜像。

# docker pull centos
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB

步骤2:启动CentOS镜像,并挂载数据卷。

命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名或镜像ID

我们希望宿主机/home中的HostDataVolume目录和容器中/home中的ContainerDataVolume目录实现数据卷挂载。

我们先来查看宿主机/home目录的内容,如下:

[root@192 ~]# ll /home/
总用量 0

没有任何文件。

执行启动CentOS容器命令:

# 启动centos容器
[root@192 ~]# docker run -it -v /home/HostDataVolume:/home/ContainerDataVolume centos /bin/bash # 查看centos容器中/home目录中内容
[root@5f63a0fc88c5 /]# ls /home/
ContainerDataVolume # 我们可以看到在centos容器的/home目录里,有ContainerDataVolume目录
# 这个目录肯定是容器启动后,根据
# -v /home/HostDataVolume:/home/ContainerDataVolume创建的。

我们在来看看宿主机上/home目录的内容,如下:

[root@192 ~]# ls /home/
HostDataVolume

发现生成了HostDataVolume文件夹,说明我们数据卷的挂着初步成功。

提示:挂载的文件夹可以存在也可以不存在,不存在则会自动创建。

步骤3:验证CentOS容器数据卷是否挂着成功。

我们可以使用docker inspect命令,来查看CentOS容器的详细数据。

[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
5f63a0fc88c5 centos "/bin/bash" 10 minutes ago Up 10 minutes # 查看centos容器的详细数据
[root@192 ~]# docker inspect 5f63a0fc88c5
[
{
"Id": "5f63a0fc88c5ef2804a45dff0fbf82ae153f2df04887427a3057668867d64443",
"Created": "2021-03-18T11:35:14.632025511Z", ... # 省略
... # 省略 "HostConfig": { # 主机配置
"Binds": [
"/home/HostDataVolume:/home/ContainerDataVolume"
], ... # 省略
},
... # 省略 "Mounts": [ # 容器挂载的数据卷
{
"Type": "bind",
"Source": "/home/HostDataVolume", # 宿主机内地址
"Destination": "/home/ContainerDataVolume", # Docker容器内的地址
"Mode": "", # 两目录就好比同一个目录。
"RW": true, # 支持读写操作
"Propagation": "rprivate"
}
],
"Config": {
... # 省略 # 新版的Dodker把Volumes信息放到了Mounts的Json字待串里了
"Volumes": null, ... # 省略
}
... # 省略
}
]
[root@192 ~]#

看到上面的信息,主要是Mounts属性,说明数据卷挂载已经成功。

『现学现忘』Docker基础 — 28、Docker容器数据卷介绍的更多相关文章

  1. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  2. Docker容器数据卷介绍和命令

    是什么 一句话:有点类似我们Redis里面的rdb和aof文件 先来看看Docker的理念: *  将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 *   ...

  3. 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷

    目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...

  4. 『现学现忘』Docker基础 — 34、DockerFile文件详解

    目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...

  5. 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令

    目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...

  6. 『现学现忘』Docker基础 — 31、实现MySQL同步数据

    目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...

  7. 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理

    目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...

  8. Docker 基础概念科普 和 常用操作介绍

    Docker 基础概念 Docker是什么?         Docker的思想来自于集装箱,集装箱解决了:在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之 ...

  9. docker 12 docker容器数据卷

    数据卷概念 ♣我们知道,当我们把一个运行中的容器关闭后,容器里的数据就没有了(如果你做了docker commit操作,数据会保留到新的镜像里面).所以我们就需要用容器数据卷把容器数据进行持久化储存. ...

随机推荐

  1. 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案

    第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...

  2. 手把手教你使用HarmonyOS本地模拟器

    2021年的华为开发者大会(HDC2021)上,我们随DevEco Studio 3.0 Beta1版本发布首次推出了本地模拟器(也称为Local Emulator),支持模拟手机品类. 我们通过下面 ...

  3. 对象到底是怎么new出来的

    前言:要想理解本文,必须先了解JVM的内存结构 一.创建对象的方式 new:最常见 反射:Class.newInstance() 使用clone() 反序列化 二.创建对象的步骤(对象在JVM中怎么存 ...

  4. node(s) didn‘t match node selector.

    k8s集群中,有pod出现了 Pending ,通过 kubectl describe pod 命令,发现了如下报错 0/4 nodes are available: 1 node(s) had ta ...

  5. suse 12 脚本部署docker(二进制文件)

    suse-linux:~ # cat /etc/issue Welcome to SUSE Linux Enterprise Server 12 SP3 (x86_64) - Kernel \r (\ ...

  6. MyBatis辅助功能点三:延迟加载

    延迟加载即先加载必需信息,然后再根据需要进一步加载信息的方式.实际应用如:常出现先查询表A,再根据表A的输出结果查询表B的情况.而有些时候,从A表查询出来的数据,只有一部分要查询表B.这时用延迟加载就 ...

  7. [LeetCode]LCP 06. 拿硬币

    桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数. 示例 1: 输入:[4,2,1] 输出:4 解释:第一堆力扣 ...

  8. 公司正在开发BI系统?这些设计要素请了解一下!

    ​1. 数据源 第一个要素数据源.企业中的BI工具可能承接上游数据中台或者其他产品输出的结果,作为输入的数据源,每个业务方用的数据库都可能是不一样的,所以可接入数据源的种类决定的一个BI工具的可用性, ...

  9. 口碑最好的五款BI工具都在这了

    目前,无论是大企业还是小企业,都面临着数字化转型的挑战.在这个过程中,BI工具起到了举足轻重的作用.市面上打着BI的旗号,实际却只是单纯数据工具的产品不少,客户在进行BI 选型时,眼花缭乱,不知所措. ...

  10. 【C# Task】 ValueTask/Task<TResult>

    概要 1.如果异步方法的使用者使用 Task.WhenAll 或 Task.WhenAny,则在异步方法中使用 ValueTask<T> 作为返回类型可能会产生高昂的成本.这是因为您需要使 ...