Docker数据卷使用手册

2024-08-26 00:36
文章标签 数据 docker 使用手册

本文主要是介绍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参数,看命名卷是否存在。结论是命名卷仍然存在。

这篇关于Docker数据卷使用手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107047

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav