Docker数据卷使用手册

news/2024/9/18 12:07:41/ 标签: docker, 容器, 运维

目录

目标

前言

概念

官方文档

匿名卷(Anonymous Volumes)

简介

案例

命名卷(Named Volumes)

简介

案例


目标

  1. 掌握Volume命令
  2. 通过演示案例,理解数据卷种类与各自的用途。

前言

        我们在很多网上教程上可以看到很多老师们往往将数据卷划分为三个种类:匿名卷、命名卷、绑定挂载。但是我去官方网站看了相关文档,文档中十分明确地将绑定挂载(Bind mounts)、数据卷(Volumes)、临时挂载(tmpfs mounts)规定为三个类别。这可能是很多老师从命令的角度去考虑问题,因为-v参数也可以创建绑定挂载。但是对于这些概念性的东西每个人理解方式不同,我们不用过于纠结,只要理解他们之间的区别并且熟练使用就行相较于绑定挂载,官方推荐优先考虑使用数据卷。

  1. 其中临时挂载的数据存储在内存中,无法持久化。所以官方将它单独拎出来做一个独立的类型。
  2. 绑定挂载与数据卷在适用场景上有很大的区别。绑定挂载适用场景偏向于开发和测试阶段,功能更倾向于实时处理,比如代码热部署。
  3. 数据卷的适用场景偏向生产阶段,功能更偏向于安全和持久化,比如数据的持久化、MQ中间件。


概念

数据卷(Volume)

官方定义

Volumes

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers.

Volumes are often a better choice than persisting data in a container's writable layer, because a volume doesn't increase the size of the containers using it, and the volume's contents exist outside the lifecycle of a given container.

翻译

卷是持久化Docker容器生成和使用数据的首选机制。

卷通常比在容器的可写层中持久化数据更好,因为卷不会增加使用它的容器的大小,而且卷的内容存在于给定容器的生命周期之外。

我的理解

  1. 容器内的某些目录和主机内的某些目录做映射处理,主机内的这些目录就叫数据卷。容器内的这些目录中的数据在数据卷中持久化,可以做到删除容器,数据卷中的数据仍然存在。
  2. 可以把数据卷和MySQL数据库类比:数据卷和MySQL数据库都用于持久化数据。数据卷主要用于跨容器容器重启、容器重建;MySQL倾向于结构化数据、事务管理、数据一致性等。

官方文档

数据卷的概念及使用方法 | Volumesicon-default.png?t=N7T8https://docs.docker.com/engine/storage/volumes/

数据卷基本命令 | docker volumeicon-default.png?t=N7T8https://docs.docker.com/reference/cli/docker/volume/


匿名卷(Anonymous Volumes)

简介

  1. 顾名思义,创建匿名卷时只需要指定容器的目录,不需要关心匿名卷的存储路径。
  2. 适用于临时数据处理、短期开发任务、重复的测试任务。

案例

        创建Nginx容器并把Nginx首页所在目录制作成匿名卷。通过修改容器内的首页内容、修改匿名卷内的首页内容、删除容器观察匿名卷等操作实现对匿名卷的初步了解。

第一步:创建Nginx容器,并将Nginx首页所在的目录做成匿名卷。

#-v表示创建数据卷,-v后面只写了一个目录,则这个目录表示容器内的目录。
docker run -d -p 8848:80 --name nginx -v /usr/share/nginx/html nginx

第二步:查看容器详情。可以发现我们的目标目录(Destination表示容器内的目录)和主机目录(Source)已经产生了关联。由于我们创建的是匿名卷,没有定义卷名,所以Docker为我们自动生成了一串哈希值(Name的值)。

docker inspect 23805528c4af

第三步:去浏览器访问Nginx,页面返回了Nginx的默认首页。此时我们修改容器内Nginx的首页并重启容器,发现首页内容改变了。

localhost:8848

#进入容器
docker exec -it 23805528c4af /bin/bash
#进入Nginx首页目录
cd /usr/share/nginx/html
#修改容器内容。有的镜像非常精简没有vi命令,大家可以用echo创建首页覆盖原来的首页。
echo '<h1>Hello World!<h1>' >index.html
#退出容器。
exit
#关闭容器
docker stop 23805528c4af
#启动容器
docker start 23805528c4af

第四步:根据第二步我们已经看到了数据卷的位置,我们来看看数据卷中的首页内容有没有发生变化。

第五步:修改数据卷中的首页内容,重启容器后访问Nginx,发现页面变化了。

第六步:分别在在容器和主机上,做创建文件、删除文件操作。发现数据卷的内容和容器内对应的目录内容一致。(操作略)

第七步:删除容器,观察数据卷是否还存在。发现还存在。

docker rm nginx

第八步:如果想实现删除容器的同时也删除匿名卷,可以有以下两种方法。

方法一:创建容器的时候使用--rm,这个参数表示容器停止后会自动删除该容器,以及相关的所有资源。

#创建容器
docker run -d -p 8848:80 --name nginx --rm -v /usr/share/nginx/html nginx
#查看数据卷
docker inspect nginx
#停止容器
docker stop nginx
#查看是否还存在数据卷
docker volume ls

方法二:如果创建容器时没有使用--rm,在删除容器时加上-v参数,表示也删除匿名卷。

#创建容器
docker run -d -p 8848:80 --name nginx -v /usr/share/nginx/html nginx
#查看数据卷
docker inspect nginx
#停止容器
docker rm -v nginx
#查看是否还存在数据卷
docker volume ls


命名卷(Named Volumes)

简介

  1. 创建命名卷时需要定义卷名。从容器的详细来看,命名卷的Name是我们自定义的,匿名卷的Name是Docker自动生成的哈希值。
  2. 容器的删除不会导致数据卷被删除。虽然匿名卷也能实现,但在创建容器或删除容器时添加特定的参数仍然会使得匿名卷被删除(上面介绍匿名卷的第八步有所体现),而命名卷不会因此被删除。
  3. 适合做数据持久化,比如数据库的存储目录和日志文件;适合做数据迁移备份;适合多个容器间共享数据。

案例

        创建Nginx容器并把Nginx首页所在目录制作成命名卷。通过停止容器、删除容器操作观察命名卷是否仍然存在。

第一步:创建Nginx容器,并将Nginx首页所在的目录做成命名卷。

#卷名是nginx-volume
docker run -d -p 8848:80 --name nginx -rm -v nginx-volume:/usr/share/nginx/html  nginx

第二步:停止容器,发现命名卷还是存在。注意:这个容器在创建时用了--rm参数。在之前的案例中,创建匿名卷时使用了这个参数,在停止容器时,匿名卷被删除了,而命名卷保留着。

第三步:创建新容器时不用--rm参数,在删除容器时使用-v参数,看命名卷是否存在。结论是命名卷仍然存在。


http://www.ppmy.cn/news/1516387.html

相关文章

前端宝典十:webpack性能优化最佳实践

Webpack 内置了很多功能。 通常你可用如下经验去判断如何配置 Webpack&#xff1a; 想让源文件加入到构建流程中去被 Webpack 控制&#xff0c;配置 entry&#xff1b;想自定义输出文件的位置和名称&#xff0c;配置 output&#xff1b;想自定义寻找依赖模块时的策略&#xff…

云计算day31

⼀、Docker 1、Docker介绍.pdf 1、Docker 是什么&#xff1f; Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙 盒”机制&#xff0c;容器之间不会存在任何接⼝。 Docker 通过 Linux Container&#xff08;容器&#xff09;技术将任意…

如何在Docker中部署Eureka Server:容器化微服务注册中心

在现代微服务架构中&#xff0c;服务注册和发现是至关重要的。Eureka Server 是一个由 Netflix 开发的开源服务注册和发现工具&#xff0c;它允许微服务实例在运行时动态地注册和查询其他服务。将 Eureka Server 部署在 Docker 中可以提高其可移植性和可维护性&#xff0c;同时…

Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱

Django 后端架构开发&#xff1a;手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱接入 &#x1f31f; 手机短信与邮箱短信验证码的应用场景 在现代应用中&#xff0c;短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景&#xf…

elasticsearch -- RestClient操作文档

RestClient操作文档 为了与索引库操作分离&#xff0c;我们再次参加一个测试类&#xff0c;做两件事情&#xff1a; 初始化RestHighLevelClient我们的酒店数据在数据库&#xff0c;需要利用IHotelService去查询&#xff0c;所以注入这个接口 package cn.itcast.hotel;import…

机器学习:opencv图像识别--图片专项

目录 前言 一、读取图片 1.安装opencv库 2.读取彩色图片 3.读取灰度图 二、RGB 1.RGB的概念 2.颜色通道&#xff1a; 3.图像表示 4.代码实现单通道图像 三、ROI 1.代码实现 四、图片打码 五、图片组合 六、图片缩放 总结 前言 OpenCV&#xff08;Open Source C…

Nginx 丢弃指定响应头

如果想丢弃服务器响应回来的某个头&#xff0c;可以使用Nginx进行代理该服务器&#xff0c;再进行配置 Nginx中丢弃指定响应头 Nginx 中拦截某个响应并丢弃特定的响应头&#xff0c;可以使用 proxy_hide_header 指令。 修改 Nginx 配置 在您的 Nginx 配置文件中&#xff08…

WPF—DispatcherTimer定时器

WPF—DispatcherTimer定时器 WPF界面是没有timer控件的,Winform有。但是我们可以使用DispatcherTimer来实现定时器。 在WPF应用程序中&#xff0c;DispatcherTimer是一种常用的计时器工具&#xff0c;它可以在指定的时间间隔触发事件。以下是一个简单的使用DispatcherTimer的…

SpringBoot项目如何使用和打包本地第三方jar包

有时候我们引用了maven仓库不存在的第三方jar&#xff0c;项目打包后jar包里没有引用的jar&#xff0c;解决方法往下看。 一、目录介绍 SpringBoot项目通过idea打成jar包部署。 将项目打成jar包后&#xff0c;所有引用的jar都存在于BOOT-INF\lib下&#xff1a; 如果存在本地…

汽车冷却液温度传感器的作用与检测方法

汽车冷却系统中的关键部件之一是冷却液温度传感器&#xff0c;它的位置通常在发动机的缸体或水泵附近&#xff0c;与冷却液直接接触。该传感器的作用是监测发动机冷却液的温度&#xff0c;它采用负温度系数热敏电阻&#xff0c;这种电阻随温度升高而降低。当冷却液温度达到预定…

Jmeter 性能测试实战教程

一、性能测试流程 进行性能测试前&#xff0c;我们首先需要了解一下性能测试大致分为哪些流程&#xff0c;这样才能保证测试过程有序开展&#xff1a; 1、性能需求分析 了解哪些业务需要&#xff08;一般都是用户量大的核心业务&#xff0c;比如登录&#xff0c;查询等功能&…

【AI学习】LLaMA模型的微调成本有几何?

在前面文章《LLaMA 系列模型的进化&#xff08;二&#xff09;》中提到了Stanford Alpaca模型。 Stanford Alpaca 基于LLaMA (7B) 进行微调&#xff0c;通过使用 Self-Instruct 方法借助大语言模型进行自动化的指令生成&#xff0c;Stanford Alpaca 生成了 52K 条指令遵循样例数…

leetcode滑动窗口问题

想成功先发疯&#xff0c;不顾一切向前冲。 第一种 定长滑动窗口 . - 力扣&#xff08;LeetCode&#xff09;1456.定长子串中的元音的最大数目. - 力扣&#xff08;LeetCode&#xff09; No.1 定长滑窗套路 我总结成三步&#xff1a;入-更新-出。 1. 入&#xff1a;下标为…

如何禁止编辑PDF文件?推荐两种方法!

在日常工作中&#xff0c;我们经常会遇到需要分享重要的PDF文件的情况&#xff0c;但又希望文件内容不被随意更改。为此&#xff0c;设置PDF文件的修改限制是一个非常有效的措施。今天分享两种常见的禁止修改PDF的方法&#xff0c;一起来看看如何设置。 方法一&#xff1a;使用…

JavaWeb学习——事务管理、AOP学习

目录 一、事务管理 1、事务回顾 2、事务进阶 a、rollbackFor属性 b、propagation属性 二、AOP学习 1、基础了解 2、AOP进阶 一、事务管理 1、事务回顾 事务的概念&#xff1a;事务必须服从ACID原则。ACID指的是原子性&#xff08;atomicity&#xff09;、一致性&#xf…

UE5 多个类选择界面生成。解决方案思路。

中控器CC 》用户界面控制器UI_CC 》用户界面UI_Inst 生成 CC使用接口&#xff0c;通知UI_CC开始生成UI_Inst。 蓝图函数库编写判断是否存在和创建UI的蓝图。&#xff08;此处略&#xff09; UI_CC生成时&#xff0c;userwidget使用接口&#xff0c;注册UI_CC的用户控件的控件…

远程在电脑上玩PS5《黑神话:悟空》?借助极空间实现PS5远程串流攻略

远程在电脑上玩PS5《黑神话&#xff1a;悟空》&#xff1f;借助极空间实现PS5远程串流攻略 哈喽小伙伴们好&#xff0c;我是Stark-C~ 这两天的《黑神话&#xff1a;悟空》可谓是火爆出圈呀&#xff01;虽说我也是第一时间体验到了这款可以说是划时代意义的首款国产3A大作&…

mac os 外接设备使用win习惯快捷键

目录 1. 简单映射版本&#xff08;常用快捷键&#xff09;2. 如果想追求完全的win匹配3. 关于外接鼠标滚动设置 1. 简单映射版本&#xff08;常用快捷键&#xff09; 就把ctrl和Command键互换一下就行 点击设置-键盘-键盘快捷键 然后在修饰键中&#xff0c;将control和comm…

MyBatis配置允许批量插入或更新数据

MyBatis配置allowMultiQueriestrue允许使用foreach标签批量插入或更新数据 执行update更新操作&#xff1a; <!-- 批量更新 --><update id"updateBatchByKey" parameterType"java.util.List"><foreach collection"list" item&q…

Telnet详解与应用——从原理到实战模拟

1. 引言 在现代网络管理中&#xff0c;远程访问和控制设备的能力至关重要。Telnet是一种经典的远程访问协议&#xff0c;尽管在安全性方面逐渐被SSH等更现代化的协议取代&#xff0c;但其在早期网络管理中的广泛使用使其成为网络工程师的基本技能之一。本文将深入探讨Telnet的…