小白快速上手 Docker 03 | Docker数据卷

数据卷

在前面使用Docker时,可能会遇到以下几个问题:

  1. 当Docker 里的容器挂了以后打不开,这时候只有删除该容器了,但删除容器会连容器中的产生的数据也一起删除了,大部分场景下这是不能接受的。
  2. Docker容器与容器之间不能直接交换数据。
  3. 容器和宿主机之间不能共享文件数据,如以nginx容器为例,需要修改默认页面内容时,需要先进入容器内部,再修改对应的index.html文件,极其不方便。

举个例子,假设我们的应用程序需要一个 MongoDB 数据库,因此,我们运行一个mongo容器:

docker run -d mongo

现在,如果容器被删除(无论是有意还是无意),我们将丢失 MongoDB 数据库中的所有数据。

这不是我们想要的。我们可能需要将数据持久地存储在数据库中,即使容器被删除了。

基于以上痛点,出现了容器数据卷的技术。

数据卷是宿主机中的一个目录或者文件,当容器目录挂载到宿主机的某个目录之后,宿主机的这个目录就成为了一个数据卷,这样容器和宿主机之间的文件就会同步。容器删除之后,容器产生的数据还会保留在宿主机上。这就解决了以上的问题。

数据卷类型

Docker 主要提供了两种不同的方式将数据从 Docker Host 挂载到 Docker 容器,来实现数据持久性:

  • 绑定挂载(Bind Mount)
  • 卷(Volumes)

Docker 卷主要有两种类型:

  • 匿名卷
  • 命名卷

中有三种数据卷类型:Bind Mount、匿名数据卷、命名数据卷,一般推荐大家使用 Bind Mount数据卷 方式持久化数据。

使用容器数据卷非常简单,只需在使用docker run命令运行容器的时候加上 -v 选项即可。

Bind Mount

bind mount自docker早期便开始为人们使用了,用于将host上的文件或目录被挂载到容器中。挂载时需要我们指定文件或目录在 host 上的完整路径。

docker run -d -v 主机目录:容器目录 镜像名称

通过这种方式运行命令后,会在宿主机上自动创建相应的目录,在宿主机上该目录下创建或者修改文件都会自动同步到容器中去。

下面通过Bind Mount形式启动一个nginx容器,并将宿主机目录/Users/qin/docker/volume/nginx_90映射到容器的/usr/share/nginx/html/目录。

进入到容器,查看/usr/share/nginx/html目录,发现容器内文件和宿主机内文件一致。

下面修改宿主机的index.html文件中v1改成v2,容器内对应的index.html文件内容也同步更改了:

删除容器后,数据卷还存在,这样保证了容器中相关数据的持久化。

需要注意的是:使用Bind Mount,宿主机文件夹将覆盖容器文件夹内容,因此如果宿主机文件夹为空,需要先将容器中要映射的文件复制到宿主机文件夹中。

Volumes

匿名数据卷

下面介绍如何通过匿名数据卷形式启动一个nginx容器,并将容器的/usr/share/nginx/html/目录映射到宿主机指定目录。

下面指令中的/usr/share/nginx/html是容器中的的路径,启动成功后docker 会将匿名卷映射到宿主机的某个途径,可以通过docker inspect查看到这个路径。

qin@linux-01:~$ docker run -itd -p 82:80  -v /usr/share/nginx/html  --name  nginx_82_anonymous_volume  nginx

匿名数据卷的优点在于,它们不需要用户手动管理。如果容器启动时使用了 --rm 选项,容器停止时,容器被自动删除,匿名卷也会自动被删除。(注意直接通过docker rm删除容器匿名卷不会被删除,只有通过docker stop停止容器才会将匿名卷删除)

但是如果容器启动时没有–rm选项,即使使用命名 docker stop/rm my_container 停止了容器,匿名卷不会被自动删除。

命名数据卷

与匿名卷相反,命名数据卷不会被附加到具体容器上,如果容器被删除,命名卷会保留。

qin@linux-01:~$ docker run -itd --rm -p 86:80  -v nginx_name_volume:/usr/share/nginx/html  --name  nginx_86_name_volume  nginx

此外需要注意的是不能在 Dockerfile 内创建命名卷,只能在运行容器时使用-v 选项指定。

卷和绑定挂载的读写权限

默认情况下,卷和绑定挂载都是可读写的,这意味着容器不仅可以读取主机上挂载的数据,还可以修改这些数据。

有时这可能不是我们所希望的,在某些情况下,你可能希望容器只具备读取权限,而不允许进行写入。

可以在 Docker 命令中的挂载选项后面添加:ro来指定挂载为只读。

例如,假设你有一个本地目录/path/to/local/html,你想把它挂载到容器内的/usr/share/nginx/html目录,并且希望这个挂载是只读的,你可以使用以下命令:

docker run -v /path/to/local/html:/usr/share/nginx/html:ro -d nginx

这条命令中的:ro确保了容器只能读取/usr/share/nginx/html中的内容,而不能修改它。

同样,如果你使用的是命名卷,你可以这样挂载:

docker run -v nginx-vol:/usr/share/nginx/html:ro -d nginx

多个容器间共享数据

另一个与持久性相关的问题是如何在多个容器之间共享文件/目录。

使用绑定挂载,容器只能在单个主机/机器内共享文件。

相比之下,使用卷可以实现更灵活的文件共享。通过卷,来自不同主机的容器可以共享底层数据。例如,可以使用 NFS(网络文件系统)或 S3(Amazon Simple Storage Service)等解决方案,让多个主机上此类的容器访问同一份数据。

案例

最后让我们看看如何使用绑定挂载和卷解决我们之前讨论过的 MongoDB 持久性问题。

要使用绑定挂载,我们需要指定宿主机的路径(/path/on/your/host)映射到容器内的/data/db目录。

docker run -v /path/on/your/host:/data/db -d mongo

使用匿名卷则不需要指定宿主机的路径:

docker run -v /data/db -d mongo

第一次运行时,Docker 会自动创建一个具有随机名称的新卷。

使用命名卷需要指定卷的名称,在本例中卷的名称指定为mongo_data

docker run -v mongo_data:/data/db -d mongo

如果指定名称的卷在本地不存在,则会自动创建。

数据卷相关命令

docker提供了一系列命令用于Docker数据卷管理,这些命令都是以docker volume开头,理解和熟练运用这些命令,将有助于我们高效地管理容器数据,确保数据的持久性和一致性。

#查看系统中有哪些数据卷
docker volume  ls#删除指定的一个或者多个数据卷
docker volume  rm 数据卷名#docker volume prune 命令删除所有没有被挂载到容器的数据卷,不管该数据卷是具名的还是匿名的。
docker volume prune#查看指定数据卷的信息 
docker volume inspect 数据卷名#创建一个数据卷,该数据卷并没有挂载到任何容器
docker volume create 数据卷名

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【图论】1 (最小生成树虚拟点思想)C.戴森球计划 题解

一. 题目 题目描述 输入输出格式 样例 样例1 样例2 & 样例解释 数据范围 二. 思路 对于前20%数据 解法 因为保证了 x i 1 x_i 1 xi​1,也就是说这些点都在 x 1 x 1 x1 这条直线上。 那么最优解必定是在 c i c_i ci​ 最小的点上建发电站&#xff0c…

4.人员管理模块(开始预备工作)——帝可得管理系统

目录 前言一、需求分析1.页面原型2.创建SQL 二、使用若依框架生成前后端代码1.添加目录菜单2.添加数据字典3.配置代码生成信息4.下载代码并导入项目5.快速导入方法 三、 总结 前言 提示:本篇讲解人员管理模块的开发的预备工作,包括需求分析、生成代码、…

uniapp+Android面向网络学习的时间管理工具软件 微信小程序

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…

最新版本SkyWalking【10.1.0】部署

这里写目录标题 前言前置条件启动Skywalking下载解压启动说明 集成Skywalking Agent下载Agent在IDEA中添加agent启动应用并访问SpringBoot接口 说明 前言 基于当前最新版10.1.0搭建skywalking 前置条件 装有JDK11版本的环境了解SpringBoot相关知识 启动Skywalking 下载 地…

golang grpc进阶

protobuf 官方文档 基本数据类型 .proto TypeNotesGo Typedoublefloat64floatfloat32int32使用变长编码,对于负值的效率很低,如果你的域有可能有负值,请使用sint64替代int32uint32使用变长编码uint32uint64使用变长编码uint64sint32使用变长…

Linux:无法为立即文档创建临时文件: 设备上没有空间

虚拟机磁盘空间不足解决记录 1、问题描述2、问题解决 1、问题描述 在命令行输入命令按Tab键时出现如下报错: 很明显,设备上没有空间,即磁盘空间不足。通过命令查看具体情况如下: df -h2、问题解决 首先想到的是虚拟机扩容。关机虚…

每日学习一个数据结构-树

文章目录 树的相关概念一、树的定义二、树的基本术语三、树的分类四、特殊类型的树五、树的遍历六、树的应用场景 树的遍历一、前序遍历二、中序遍历三、后序遍历使用java代码实现遍历总结 树的相关概念 树是一种重要的非线性数据结构,在计算机科学中有着广泛的应用…

C++IO流

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 CIO流 收录于专栏 [C进阶学习] 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. C语言的输入与输出 2. 流是什…

(PyTorch) 深度学习框架-介绍篇

前言 在当今科技飞速发展的时代,人工智能尤其是深度学习领域正以惊人的速度改变着我们的世界。从图像识别、语音处理到自然语言处理,深度学习技术在各个领域都取得了显著的成就,为解决复杂的现实问题提供了强大的工具和方法。 PyTorch 是一个…

C语言基础(7)之操作符(1)(详解)

目录 1. 各种操作符介绍 1.1 操作符汇总表 2. 移位操作符 2.1 移位操作符知识拓展 —— 原码、反码、补码 2.2 移位操作符讲解 2.2.1 右移操作符 ( >> ) 2.2.2 左移操作符 ( << ) 3. 位操作符 3.1 & (按位与) 3.2 | (按位或) 3.3 ^ (按位异或) 3.4…

深度学习每周学习总结J1(ResNet-50算法实战与解析 - 鸟类识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1a;定义损失函数&#xff0c;学习率&a…

Python 解析 html

一、场景分析 假设有如下 html 文档&#xff1a; 写一段 python 脚本&#xff0c;解析出里面的数据&#xff0c;包括经度维度。 <div classstorelist><ul><li lng"100.111111" lat"10.111111"><h4>联盟店1</h4><p>…

【C语言】数组练习

【C语言】数组练习 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚练习2、二分查找 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 练习2、二分查找 在⼀个升序的数组中查找指…

--- java数据结构 map set ---

java中map 和 set的底层实现是通过搜索树和哈希函桶来实现 搜索树 二叉搜索树有叫二叉排序树 他具有以下的特点 若存在左节点&#xff0c;那么他左节点的值一定小于根节点 若存在右节点&#xff0c;那么他右节点的值一定大于根节点 它的左右子树也是搜索树 对他进行中序…

Oracle架构之物理存储中各种文件详解

文章目录 1 物理存储1.1 简介1.2 数据文件&#xff08;data files&#xff09;1.2.1 定义1.2.2 分类1.2.2.1 系统数据文件1.2.2.2 撤销数据文件1.2.2.3 用户数据文件1.2.2.4 临时数据文件 1.3 控制文件&#xff08;Control files&#xff09;1.3.1 定义1.3.2 查看控制文件1.3.3…

大数据与人工智能:基础与应用的多维思考

大数据与人工智能&#xff1a;基础与应用的多维思考 前言一、时代定位与发展方向二、人工智能的本质与学科融合三、大数据和人工智能的构成要素与大众需求四、计算机系统结构与基础软件的重要性五、研究途径与领域知识的作用六、发展的态度与责任 前言 当下&#xff0c;大数据…

分布式学习02-CAP理论

文章目录 CAP三指标一致性可用性分区容错性 CAP不可能三角P存在的必要性CP理论AP理论 CAP理论对分布式系统的特性做了高度抽象&#xff0c;将其抽象为一致性、可用性、分区容错性。 并对特征间的冲突做了总结&#xff1a;CAP不可能三角。 CAP三指标 一致性&#xff08;Consis…

Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!

Windows环境Apache httpd 2.4 web服务器加载PHP8&#xff1a;Hello&#xff0c;world&#xff01; &#xff08;1&#xff09;首先需要安装apache httpd 2.4 web服务器&#xff1a; Windows安装启动apache httpd 2.4 web服务器-CSDN博客文章浏览阅读222次&#xff0c;点赞5次&…

Git 下载及安装超详教程(2024)

操作环境&#xff1a;Win 10、全程联网 一、什么是Git&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 创立&#xff0c;用于有效、高速地处理从小到大的项目版本管理。Git 是目前世界上最流行的版本控制系统&#xff0c;被广泛用于软件开发中…

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!

计算机视觉领域顶级会议 European Conference on Computer Vision&#xff08;ECCV 2024&#xff09;将于9月29日至10月4日在意大利米兰召开&#xff0c;快手音视频技术部联合清华大学所发表的题为《XPSR: Cross-modal Priors for Diffusion-based Image Super-Resolution》——…