Docker学习笔记:数据卷

本文是自己的学习笔记


  • 1、数据卷基本概念
  • 2、数据卷示例
  • 3、数据卷的权限控制
  • 4、数据卷的创建方式
  • 5、数据卷容器


1、数据卷基本概念

数据卷就是docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。简单来说,容器卷就相当于Redis中持久化方式的RDB和AOF。

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

特点:

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

使用数据卷时会建立容器目录到宿主机目录的映射。之后容器只需要在这个目录保存文件,那对应的宿主机目录也会保存这个文件,即使容器关闭宿主机依然可以在对应的目录中访问修改这些文件。

2、数据卷示例

这里给一个直接使用数据卷的示例,我们在启动一个centos时创建一个数据卷。

docker run -it -v /root/dockerfile1:/root/docker1 centosv表示创建数据卷的映射,/root/dockerfile1是机器上的地址;/root/docker1是容器中的地址。

这个指令会启动容器并创建数据卷,容器中root/docker1的地址映射到宿主机的root/dockerfile1。我们在root/docker1写入修改文件时,同样的修改会体现在宿主机的/root/dockerfile1,反之亦然。

即使容器关闭后其在/root/docker1下存储的文件也不会消失,这就实现了容器数据的持久化。

比如我在容器中/root/docker1创建一个文件hello.txt,那主机的/root/dockerfile1也会出现这个文件。

我在主机中删除hello.txt,那容器中的这个文件也会被删除。


3、数据卷的权限控制

创建数据卷时默认权限是双向的,即宿主机和容器都有写权限。

我们可以根据需要管理权限,只需要在映射后面加:和权限。

比如下面的指令中,容器只有只读权限。

docker run -it -v /root/dockerfile1:/root/docker1:ro centos

ro就表示read only

这里的权限控制是指对容器的权限控制,宿主机毫无疑问对所有文件有所有的权限。

权限控制只有两个选项,一个是ro,一个是默认的rw



4、数据卷的创建方式

  1. 在启动容器时通过指令创建:docker run -it -v /root/dockerfile1:/root/docker1 centos
  2. 通过脚本创建:我们先创建一个脚本文件名叫docker1,其中的内容如下
FROM centos
VOLUME ["/root/dataVolumeContainer1","/root/dataVolumeContainer2"]
CMD echo "finished,-----success1"
CMD /bin/bash

脚本中在容器中设置了两个数据卷目录,宿主机的目录没有设置但是启动容器后可以查看。

指定脚本启动容器。

docker build -f docker1 -t centos .

启动成功后查看容器的配置,获取宿主机的目录映射

docker inspect cec

然后可以就可以看到宿主机的映射目录。
请添加图片描述

这个方式可以配置多个目录,同时他是动态的设置宿主机的目录,避免了换机器上时因目录权限不够等原因创建容器灰白的情况。

5、数据卷容器

当我们有多个容器的时候,有些场景这些容器之间需要通过数据卷共享数据。请添加图片描述

当然,我们可以通过为这几个容器指定相同的宿主机目录实现需求。但并不是一个好方法,如果改变宿主机地址工作量可不小。

这时候最好的方式是使用数据卷容器。简单来说就是启动一个容器挂载数据卷,其他容器只需要挂载这个容器就可以实现数据共享。

挂载数据卷的容器就是数据卷容器。



这里展示一个示例。示例中会建立三个容器,但只有第一个容器指定数据卷,其他两个容器会挂载第一个容器。

首先启动容器,命名为dc01并挂载数据卷。

docker run -it -v /root/dockerfile1:/root/docker1  --name dc01 centos

之后启动两个容器并挂载第一个容器。

docker run -it --name dc02 --volumes-from dc01 centos
docker run -it --name dc03 --volumes-from dc01 centos

现在这三个容器就可以在/root/docker1目录下共享数据了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内存泄漏到底是个什么东西?如何避免内存泄漏

目录 内存泄漏到底是个什么东西?如何避免内存泄漏 一、什么是内存泄漏? 1、内存泄漏 2、GC(垃圾回收)机制是什么? 二、常见内存泄漏场景 1、意外的全局变量 2、被遗忘的定时器/回调 3、闭包未释放大对象 4、D…

【图像处理入门】8. 数学基础与优化:线性代数、概率与算法调优实战

摘要 图像处理的核心离不开数学工具的支撑。本文将深入解析线性代数、概率论在图像领域的应用,包括矩阵变换与图像几何操作的关系、噪声模型的数学描述,以及遗传算法、粒子群优化等智能算法在参数调优中的实践。通过理论结合代码案例,帮助读者掌握从数学原理到工程优化的完…

包含30个APP客户端UI界面的psd适用于旅游酒店项目

包含30个APP客户端UI界面的psd适用于旅游酒店项目 此资源包含30个完全可编辑的psd界面组成。内容包括欢迎页、登录、注册、首页、搜索、侧边菜单、用户中心、个人介绍、用户空间、产品详细信息、酒店预定、天气情况等各种常用界面,您可以将其用于旅游酒店类的APP应用…

华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建PandaWiki知识库问答系统

华为云FlexusDeepSeek征文 | 基于华为云ModelArts Studio搭建PandaWiki知识库问答系统 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、PandaWiki介绍PandaWiki 简介主要特点 三、安装PandaWiki应用一键部署方式访问PandaWiki系统 四…

Python应用八股文

大家好!在 Python 学习的道路上,掌握一些基础知识要点至关重要,这些要点常被称为“Python 八股”。以下是对它们的简易总结,帮助你快速回顾和巩固 Python 的核心概念。 一、数据结构 列表(List):有序可变序…

在 CentOS中安装Docker并安装青龙脚本——笔记

安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 官方 GPG 密钥 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装 Docker 引擎 sudo yum install -y docker-ce docker-ce-cli con…

MySQL分库分表面试题深度解析

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 MySQL分库分表面试题深度解析一、核心概念与…

AI首次自主发现人工生命

转: 近日,人工智能领域迎来了一项革命性的突破。Transformer 论文作者之一的 Llion Jones 与前谷歌研究人员 David Ha 共同创立的人工智能公司 Sakana AI,联合MIT、OpenAI、瑞士AI实验室IDSIA等机构的研究人员,共同提出了一种名为…

企业架构框架深入解析:TOGAF、Zachman Framework、FEAF与Gartner EA Framework

执行摘要 企业架构(EA)是一项至关重要的实践,它使组织能够协调其业务战略、运营流程和技术基础设施,以实现整体战略目标。企业架构框架作为结构化的方法论和综合性工具,旨在管理企业级系统的固有复杂性,提…

[7-01-03].第03节:环境搭建 - 集群架构

RabbitMQ学习大纲 一、使用集群的原因 1.基于以下原因,需要搭建一个 RabbitMQ 集群来解决实际问题 单机版的,无法满足目前真实应用的要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,会导致rabbitMQ无法提供服务单台 R…

基于大模型预测过敏性紫癜的技术方案大纲

目录 一、引言(一)研究背景(二)研究目的二、技术方案(一)数据收集与预处理(二)大模型构建与训练(三)术前预测(四)术中预测与监测(五)术后预测与护理(六)麻醉方案制定(七)统计分析(八)技术验证方法(九)实验验证证据(十)健康教育与指导三、技术方案流程图…

Mysql 忘记密码后如何修改

如果忘记了 Linux 上 MySQL 的 root 密码,可以通过以下步骤重置(适用于 MySQL 5.7+ 及 MariaDB): 步骤 1:停止 MySQL 服务 systemctl stop mysql步骤 2:以跳过权限表的方式启动 MySQL mysqld_safe --skip-grant-tables --skip-networking &此命令会临时禁用密码验证…