【云原生】一文学会Docker存储所有特性

目录
1.Volumes
1.Volumes使用场景
2.持久将资源存放
3. 只读挂载
2.Bind mount
Bind mounts使用场景
3.tmpfs mounts使用场景
4.Bind mounts和Volumes行为上的差异
5.docker file将存储内置到镜像中
6.volumes管理
1.查看存储卷
2.删除存储卷
3.查看存储卷的详细信息
7.Volumes操作管理
1.Volume管理
2.挂载数据卷到容器目录
3.使用只读数据卷
docker四种方式:默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供),其中volumes、bind mounts两种实现持久化容器数据;
-
默认:数据保存在运行的容器中,容器删除后,数据也随之删除
-
volumes:数据卷,数据存放在主机文件系统/var/lib/docker/volumes/目录下,该目录由docker管理,其他进行不允许修改,推荐该种方式持久化数据
-
binf mounts:直接挂载主机文件系统的任何目录或文件,类似主机和容器的共享目录,主机上任何进行都可以访问修改,容器种也可以修改,这种方式操作较方便
-
tmpfs:数据暂存在主机内存中,不会写入文件系统,重启后,数据删除。
1.Volumes
1.Volumes使用场景
-
在多个容器间共享数据。
-
无法确保Docker主机一定拥有某个指定的文件夹或目录结构,使用Volumes可以屏蔽这些宿主机差异。
-
当你希望将数据存储在远程主机或云提供商上。
-
当你希望备份,恢复或者迁移数据从一台Docker主机到另一台Docker主机,Volumes是更好的选择。
2.持久将资源存放
[root@localhost ~]# docker run -itd --name web02 -v /usr/share/nginx/html -p 80:80 nginx
47cc88c32968adfecd0040232e37ad3e7fca59d1b32715473c8975a115a5cd71
[root@localhost ~]# docker inspect -f '{{.Mounts}}' web02
[{volume 0f0c1c10037c7519b5015b34e377a9a5bb211a98455745d29060e9b0ef464f83 /var/lib/docker/volumes/0f0c1c10037c7519b5015b34e377a9a5bb211a98455745d29060e9b0ef464f83/_data /usr/share/nginx/html local true }]
[root@localhost ~]# cd /var/lib/docker/volumes/0f0c1c10037c7519b5015b34e377a9a5bb211a98455745d29060e9b0ef464f83/_data
[root@localhost _data]# ls
50x.html index.html
当从外部修改时,内部也会更改
[root@localhost _data]# echo "test successful" > index.html

3. 只读挂载
在容器内,无法对挂载目录来进行写入
[root@localhost _data]# docker run -itd --name web05 -v /nginx/html/:/usr/share/nginx/html:ro -p 80:80 nginx
420c9344b0bb31c885f514a4a98c9761a0e3a636b50420eadc1ce7e10c6c2a2d
[root@localhost _data]# docker exec -it web05 /bin/bash
root@420c9344b0bb:/# cd /usr/share/nginx/html/
root@420c9344b0bb:/usr/share/nginx/html# touch 1.txt
touch: cannot touch '1.txt': Read-only file system
2.Bind mount
Bind mounts使用场景
-
在宿主机和容器间共享配置文件。例如将nginx容器的配置文件保存在宿主机上,通过Bind mounts挂载后就不用进入容器来修改nginx的配置了。
-
在宿主机和容器间共享代码或者build输出。例如将宿主机某个项目的target目录挂载到容器中,这样在宿主机上Maven build出一个最新的产品,可以直接咋i容器中运行,而不用生成一个新的镜像。
-
Docker主机上的文件或目录结构是确定的
创建一个nginx将前端文件映射到容器
[root@localhost ~]# mkdir -p /nginx/html
[root@localhost ~]# cd /nginx/html/
[root@localhost html]# echo "hello world" > index.html
[root@localhost ~]# docker run --name web01 -itd -p 80:80 -v /nginx/html/:/usr/share/nginx/html/ nginx
f8c5174eb4e7d960e9c9a39121a7eeef7837b0936919ce5461d1526b9879ea43

3.tmpfs mounts使用场景
-
当你因为安全或其他原因,不希望将数据持久化到容器或宿主机上,那你可以使用tmpfs mounts模式。
4.Bind mounts和Volumes行为上的差异
-
如果你将一个空Volume挂载到一个非空容器目录上,那么这个容器目录中的文件会被复制到Volume中,即容器目录原有文件不会被Volume覆盖。
-
如果你使用Bind mounts将一个宿主机目录挂载到容器目录上,此容器目录中原有的文件会被隐藏,从而只能读取到宿主机目录下的文件
| 属性 | bind mount | docker managed volume |
|---|---|---|
| volume | 可任意指定 | /var/lib/docker/volumes固定指定位置 |
| 对已有mount point影响 | 隐藏并替换为volume | 原有数据复制到volume |
| 是否支持单个文件 | 支持 | 不支持,只支持目录 |
| 权限控制 | 可以设置为只读,默认为读写权限 | 无控制,均为读写权限 |
| 移植性 | 移植性弱,与host path绑定 | 移植性强,无需指定host目录 |
5.docker file将存储内置到镜像中
vi Dockerfile
FROM nginx:latest
VOLUME /usr/share/nginx/html
构建
[root@localhost ~]# [root@localhost ~]# docker build -t voltest .
[root@localhost ~]# docker run -itd --name voltest1 voltest
1c76e5439f2a0f922841850ba76d50156c2aae5ab3d3c8327c1158510b0eded8
查看存储
[root@localhost ~]# docker inspect -f '{{.Mounts}}' 1c76e543
[{volume 22019515c7c4c7f0798d360a8e3e281c391fdbe0bfd343a8b9ae8a2138969265 /var/lib/docker/volumes/22019515c7c4c7f0798d360a8e3e281c391fdbe0bfd343a8b9ae8a2138969265/_data /usr/share/nginx/html local true }]
6.volumes管理
众所周知,当容器被删除后,关联的存储卷,将不会被删除,如何来管理他们呢
1.查看存储卷
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 0f0c1c10037c7519b5015b34e377a9a5bb211a98455745d29060e9b0ef464f83
local 22019515c7c4c7f0798d360a8e3e281c391fdbe0bfd343a8b9ae8a2138969265
2.删除存储卷
当容器被删除后,存储卷将会与其他容器没有任何关联,也被称作孤儿volume
[root@localhost ~]# docker volume rm 0f0c1c10037c7519b5015b34e377a9a5bb211a98455745d29060e9b0ef464f83
0f0c1c10037c7519b5015b34e377a9a5bb211a98455745d29060e9b0ef464f83
删除容器不存在的所有卷
[root@localhost ~]# docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
3.查看存储卷的详细信息
[root@localhost ~]# docker volume inspect 127bbbfc3a93d16920da4003eaa590f939426bcb60085801c8c9187bb8651359
[{"CreatedAt": "2023-07-12T18:04:58+08:00","Driver": "local","Labels": {"com.docker.volume.anonymous": ""},"Mountpoint": "/var/lib/docker/volumes/127bbbfc3a93d16920da4003eaa590f939426bcb60085801c8c9187bb8651359/_data","Name": "127bbbfc3a93d16920da4003eaa590f939426bcb60085801c8c9187bb8651359","Options": null,"Scope": "local"}
]
7.Volumes操作管理
1.Volume管理
创建一个Volume:
$ docker volume create my-vol
查看Volumes:
$ docker volume ls
local my-vol
$ docker volume inspect my-vol
[{"Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/my-vol/_data","Name": "my-vol","Options": {},"Scope": "local"}
]
我么可以看到创建的 Volume my-vol 保存在目录**/var/lib/docker/volumes/**下,以后所有针对该 Volume 的写数据都会保存中目录**/var/lib/docker/volumes/my-vol/_data**下。
删除一个 Volume:
$ docker volume rm my-vol
或者删除所有未使用的 Volumes:
docker volume prune
2.挂载数据卷到容器目录
创建了一个 Volume 之后,我们可以在运行容器时通过指定 -v 或 --mount 参数来使用该 Volume:
使用--mount参数:
$ docker run -d \
--name=nginxtest \
--mount source=nginx-vol,destination=/usr/share/nginx/html \
nginx:latest
source 指定 volume,destination 指定容器内的文件或文件夹。
或者使用 -v 参数:
$ docker run -d \
--name=nginxtest \
-v nginx-vol:/usr/share/nginx/html \
nginx:latest
挂载成功后,容器从 /usr/share/nginx/html 目录下读取或写入数据,实际上都是从宿主机的 nginx-vol 数据卷中读取或写入数据。因此 Volumes 或 Bind mounts 也可以看作是容器和宿主机共享文件的一种方式。
-v 参数使用冒号分割 source 和 destination,冒号前半部分是 source,后半部分是 destination。
如果你挂载一个还不存在的数据卷,Docker 会自动创建它。(因此创建数据卷那一步非必需)
如果容器中的待挂载的目录不是一个空目录,那么该目录下的文件会被复制到数据卷中。(Bind mounts下,宿主机上的目录总会覆盖容器中的待挂载目录)
-v 参数和 --mount 参数总的来说功能几乎相同,唯一的区别是在运行一个 service 时只能够 --mount 参数来挂载数据卷。
3.使用只读数据卷
有些情况下,我们希望某个数据卷对某个容器来说是只读的,可以通过添加 readonly 选项来实现:
$ docker run -d \
--name=nginxtest \
--mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \
nginx:latest
相关文章:
【云原生】一文学会Docker存储所有特性
目录 1.Volumes 1.Volumes使用场景 2.持久将资源存放 3. 只读挂载 2.Bind mount Bind mounts使用场景 3.tmpfs mounts使用场景 4.Bind mounts和Volumes行为上的差异 5.docker file将存储内置到镜像中 6.volumes管理 1.查看存储卷 2.删除存储卷 3.查看存储卷的详细信息…...
Android Ble蓝牙App(一)扫描
Ble蓝牙App(一)扫描 前言正文一、基本配置二、扫描准备三、扫描页面① 增加UI布局② 点击监听③ 扫描处理④ 广播处理 四、权限处理五、扫描结果① 列表适配器② 扫描结果处理③ 接收结果 六、源码 前言 关于低功耗的蓝牙介绍我已经做过很多了࿰…...
mac pd安装ubuntu并配置远程连接
背景 一个安静的下午,我又想去折腾点什么了。准备学习一下k8s的,但是没有服务器。把我给折腾的,在抱怨了:为什么M系列芯片的资源怎么这么少。 好在伙伴说,你可以尝试一下ubantu。于是,我只好在我的mac上安…...
1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪
本篇继先前发布的1.2 eureka注册中心,完成服务注册的内容。 目录 环境搭建 采用eurekaribbon的方式,对多个user服务发送请求,并实现负载均衡 负载均衡原理 负载均衡源码追踪 负载均衡策略 如何选择负载均衡策略? 饥饿加载…...
mysql修改字段长度是否锁表
Varchar对于小于等于255字节以内的长度可以使用一个byte 存储。大于255个字节的长度则需要使用2个byte存储 1, 如果是255长度之内的扩展,或者255之外的扩展,则不锁表,采用in-place方式执行 2, 如果从varchar长度从(0,2…...
SpringCloud集成OpenTelemetry的实现
SpringCloud项目做链路追踪,比较常见的会集成SleuthZipKin来完成,但这次的需求要集成开源框架OpenTelemetry,这里整理下实现过程。相关文章: 【SpringCloud集成SleuthZipkin进行链路追踪】 【OpenTelemetry框架Trace部分整理】 …...
Python爬取IP归属地信息及各个地区天气信息
一、实现样式 二、核心点 1、语言:Python、HTML,CSS 2、python web框架 Flask 3、三方库:requests、xpath 4、爬取网站:https://ip138.com/ 5、文档结构 三、代码 ipquery.py import requests from lxml import etree # 请求…...
RedLock + Redisson
目录 2.9 RedLock2.9.1 上述实现的分布式锁在集群状态下失效的原因2.9.2 解决方式-RedLock 2.10 redisson中的分布式锁2.10.0 redisson简介以及简单使用简单使用redisson中的锁Redisson常用配置 2.10.1 Redisson可重入锁实现原理2.10.2 公平锁(Fair Lock)…...
计算机视觉:卷积层的参数量是多少?
本文重点 卷积核的参数量是卷积神经网络中一个重要的概念,它决定了网络的复杂度和计算量。在深度学习中,卷积操作是一种常用的操作,用于提取图像、语音等数据中的特征。卷积神经网络的优势点在于稀疏连接和权值共享,这使得卷积核的参数相较于传统的神经网络要少很多。 举例…...
Docker 容器基础操作
Docker容器基础操作 容器(container)是Docker镜像的运行实例,类似于可执行文件与进程的关系,Docker是容器引擎,相当于系统平台。 容器的生命周期 容器的基础操作(以 tomcat8.0 为例) # 拉取tomcat8.0镜像 [root@tudou tudou]# docker pull tomcat:8.0 8.0: Pulling f…...
【Vue3+Ts+Vite】配置滚动条样式
一、先看效果 二、直接上代码 <template><div class"main-container"><h1 v-for"index in 50" :key"index">这是home页面</h1></div> </template> <style lang"scss" scoped> .main-conta…...
react map使用方法详解
在React中,map()方法是用于数组的常见方法之一,它可以用于处理数组并返回一个新的数组。在React中,经常使用map()方法来遍历数组,生成对应的组件列表或进行数据转换操作。 下面是map()方法在React中的使用方法详解: …...
PoseiSwap:通过 RWA 的全新叙事,反哺 Nautilus Chain 生态
PoseiSwap 是 Nautilus Chain 上的首个 DEX,作为目前行业内模块化区块链叙事的早期奉行者,PoseiSwap 也得到了较高的市场关注。基于 Nautilus Chain,PoseiSwap 打造了一个全新的 Rollup 应用层,并通过零知识证明来建立全新的订单簿…...
PHP8的常量-PHP8知识详解
常量和变量是构成PHP程序的基础,在PHP8中常量的这一节中,主要讲到了定义常量和预定义常量两大知识点。 一、定义常量 定义常量也叫声明常量。在PHP8中,常量就是一个标识符(名字),一旦定义(声明&…...
印花税的本质和底层逻辑是什么?印花税降低是利好股市吗?
内容由LLM协助生成: 印花税是一种对特定交易或证券交易征收的税费,由政府机构收取。其本质和底层逻辑可以归结为以下几点: 资金来源:印花税是国家财政收入的一部分,用于满足政府的财政需求和公共支出。政府通过征收印花…...
pytorch+GPU跑模型时 nvrtc: error: failed to open nvrtc-builtins64_117.dll
1.先检查自己cuda版本: print(torch.version.cuda) #查看cuda版本 print(torch.cuda.is_available()) # 查看cuda是否可用 print(torch.cuda.device_count()) # 查看可行的cuda数目如果版本高于11建议先降版本,然后再试下。 2.重新安装nvrtc-builtin…...
SQL-每日一题【626.换座位】
题目 表: Seat 编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。 按 id 升序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 前置知识 MySQL 的 MOD() 函数是取模运算的函数,它返回两个数相除…...
Swagger之Hello World !
目录 ■1.前言・Swagger介绍 ■2.例子,如果基于Spring Boot项目,实现Swagger---非常简单 2.1.已有的SpringBoot项目 2.2.修改POM文件 2.3.添加Config文件…...
VSCode SSH远程连接与删除
1.ubuntu设置 安装SSH服务并获取远程访问的IP地址 在Ubuntu系统中,“CtrlAltT”打开终端工具,执行如下命令安装SSH服务。 sudo apt-get install openssh-server如果安装失败则先安装依赖项。 2.VS Code 设置 2.1安装与设置Remote SSH 打开Windows系…...
面试典中典之线程池的七大参数
文章目录 一、七大元素解释1.corePoolSize(核心线程数):2.maximumPoolSize(最大线程数):3.keepAliveTime(线程空闲时间):4.unit(时间单位)&#x…...
前有张雪峰,后有张雪——这难道是天意-他们的成功最大的特点就是把事情做到极致,你只要坚持,就可能会成功!-你不坚持,不热爱,不可能会成功!-为什么摩托车发动机可以弯道超车,汽车不可以?到底中国汽车的发
前有张雪峰,后有张雪——这难道是天意-他们的成功最大的特点就是把事情做到极致,你只要坚持,就可能会成功!-你不坚持,不热爱,不可能会成功!-为什么摩托车发动机可以弯道超车,汽车不可以?到底中国汽车的发动机质量如何? 前有张雪峰,后有张雪——这难道是天意-他们的成…...
在github上部署个人的vitepress文档网站
我开发的BMapViewer组件正式上线了,文档使用了vitepress搭建编写,使用github Pages进行部署,现在可以正常访问了,接下来我会完整的写一遍网站部署过程。 我的文档网站:https://banyan666.github.io/BMapViewer-docs/ …...
微信好友数据分析与班级学生信息分析实战
微信好友数据分析与班级学生信息分析一、设计思想两个数据分析案例,旨在综合运用Python数据分析与可视化库(Pandas、Matplotlib、PyEcharts、WordCloud、SnowNLP等),完成从数据读取、清洗、分析到可视化的全流程。设计思想如下&am…...
开源AI图像工作站落地:Pixel Fashion Atelier在数字藏品中的应用
开源AI图像工作站落地:Pixel Fashion Atelier在数字藏品中的应用 1. 项目概述 Pixel Fashion Atelier(像素时装锻造坊)是一款基于Stable Diffusion与Anything-v5的开源图像生成工作站。与传统AI工具不同,它采用了复古日系RPG的&…...
学术研究必备:8款AI论文写作工具,爱毕业aibiye高效实用
人工智能技术在学术研究领域的深度整合为论文撰写流程带来了革命性变革,通过8款核心智能工具的协同应用——包括文献智能分析系统、自动化内容生成引擎以及文本精准优化平台——研究者能够实现从数据挖掘到学术表达的全程智能化,显著提升文献处理效率与学…...
Nunchaku FLUX.1-dev部署教程:Linux系统下CUDA驱动与PyTorch匹配指南
Nunchaku FLUX.1-dev部署教程:Linux系统下CUDA驱动与PyTorch匹配指南 想用最新的Nunchaku FLUX.1-dev模型生成惊艳的AI图片,结果卡在了环境配置上?别担心,这篇教程就是为你准备的。很多朋友在部署时遇到的最大障碍,往…...
红烧肉制作技术详解
红烧肉制作技术详解 红烧肉是一道传统的中式美食,以其色泽红亮、口感酥烂、味道浓郁而闻名。本文将详细介绍红烧肉的制作步骤及技巧,帮助你在家也能做出美味的红烧肉。 材料准备 五花肉 500克生姜 适量大葱 适量八角 2颗桂皮 1小块冰糖 适量料酒 适量老抽…...
Anaconda 虚拟环境创建后,切换Python 版本
Anaconda 虚拟环境创建后,Python 版本可以更换!完全不用删除重建环境,一行命令就能直接修改 / 切换 Python 版本,非常方便。一、切换 Python 版本的命令先激活你的虚拟环境,再执行升级 / 降级命令:1. 先激活…...
聊聊jvm的内存结构, 以及各种结构的作用
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
在Vivado里调通3/4删余卷积码Viterbi译码:从分支度量到回溯的完整避坑指南
Vivado平台实现3/4删余卷积码Viterbi译码的工程实践 在数字通信系统中,卷积码因其优异的纠错性能被广泛应用。802.11a等标准中采用的删余卷积码技术,通过有选择地删除部分编码比特来提高码率。本文将深入探讨如何在Vivado平台上实现3/4删余卷积码的Viter…...
