云时代【7】—— 存储卷

云时代【7】—— 存储卷

  • 四、Docker
    • (四)存储卷
      • 1. 存储卷
        • (1)定义
        • (2)分类
      • 2. 相关指令
        • (1)管理卷 Volume
          • A. 创建方式
            • 方式一:docker volume
            • 方式二:docker run -v 与 --mount
            • 方式三:DockerFile 创建匿名卷
          • B. 实战演习
        • (2)绑定卷 bind mount
        • (3)临时卷 tmpfs
      • 3. 实战演习

四、Docker

(四)存储卷

1. 存储卷

(1)定义

存储卷是 将宿主机的本地文件系统中存在的某个目录 直接与 容器内部的文件系统上的某一目录 建立绑定关系。
用专业的语言解释就是:当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录,这个目录就被称作:存储卷。我们可以理解为:容器是地面上的房子,而房子(容器)的地下室就是存储卷。哪怕容器(地下室上的房子)被删除掉也不会影响到存储卷(地下室)。
既然卷的本质是文件或者目录,那么它就可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。例如:将宿主机的/data/web 目录与容器中的/container/data/web目录绑定,当容器中的进程向/container/data/web目录写数据时,其实也直接写到了宿主机的目录上的/data/web上。存储卷绕过容器文件系统与宿主机的文件系统建立关联关系,使得可以在宿主机和容器内共享数据库内容,让容器直接访问宿主机中的内容,也可以宿主机向容器写入内容,容器和宿主机的数据读写是同步的。

(2)分类

目前Docker提供了三种方式将数据从宿主机挂载到容器中:

  • volume管理卷

默入映射到宿主机的/var/lib/docker/volumes目录下。只需要在容器内指定容器的挂载点是什么,而它会被绑定宿主机的哪个目录下呢?一般容器引擎**daemon**自行创建一个空的目录 或 使用一个已经存在的目录,与存储卷建立存储关系。这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录,临时存储比较适合

  • bind mount绑定数据卷

映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径,在容器中也需要指定一个特定的路径,两个已知的路径建立关联关系

  • tmpfs mount临时数据卷

映射到于宿主机内存中,一旦容器停止运行, tmpfsmounts 会被移除,数据就会丢失,用于高性能的临时数据存储

2. 相关指令

(1)管理卷 Volume

A. 创建方式

方式一:docker volume
docker volume create
docker volume ls
docker volume inspect '卷ID'
ls -l /data/var/lib/docker/volumes/'卷ID'/_data

image.png

docker volume create --label MYTEST=1 myvolumetest2
docker volume ls
docker volume inspect myvolumetest2
ls -l /data/var/lib/docker/volumes/myvolumetest2/_data

image.png

echo "123" > ./test.txt
ll
cat test.txt
docker volume rm myvolumetest3
ll # 删除卷之后,写入卷的文件也会被删除

image.png

docker volume ls
docker volume prune
docker volume ls

image.png

方式二:docker run -v 与 --mount
docker run -d --name myvolumenginx1 -v volumenginx1:/usr/share/nginx/html nginx:1.23.0
docker ps
docker volume ls
docker volume inspect volumenginx1
ls -l /data/var/lib/docker/html/volumenginx1/_data
docker exec -it myvolumenginx1 bash
ls -l
rm index.html
exit
ls -l /data/var/lib/docker/html/volumenginx1/_data # 默认情况下可以直接删除卷中的文件

image.png

docker run -d --name myvolumenginx2 -v volumenginx2:/usr/share/nginx/html:ro nginx:1.23.4
docker ps | grep myvolumenginx2
docker volume ls | grep volumenginx2
docker exec -it myvolumenginx2 bash
cd /usr/share/nginx/html
ls -l
rm index.html # 无法删除与修改,因为设置了卷是只读的
exit
# 但是可以在容器外的宿主机上修改
docker inspect volumenginx2
cd /data/var/lib/docker/volumes/volumenginx2/_data
echo "Hello World" > index.html
exit
# 因为容器没有设置端口映射,所以只能直接进入容器查看
docker exec -it myvolumenginx2 bash
cd /usr/share/nginx/html
cat index.html

image.png
image.png
image.png

docker run -d --name myvolumenginx3 --mount 'src=volumenginx3,dst/usr/share/nginx/html,ro' nginx:1.23.4
docker volume ls
docker volume inspect volumenginx3

image.png

方式三:DockerFile 创建匿名卷

B. 实战演习
docker volume create test1
docker volume ls | grep test1
docker volume inspect test1
ls -l /data/var/lib/docker/volumes/test1/_data

docker run -d --name mynginx5 -p 8045:80 -v test1:/usr/share/nginx/html nginx:1.23.4
docker ps | grep mynginx5
dcoker container inspect mynginx5 # "Mount"可以看到挂载的地址
cd /data/var/lib/docker/volumes/test1/_data
vim index.html
docker exec -it mynginx5 bash
cd /usr/share/nginx/html
cat index.html

image.png
image.png
image.png

# 容器被删除,卷不会
docker run -d --name mynginx6 -v test2:/usr/share/nginx/html -p 8046:80 nginx:1.23.4
docker inspect '容器ID'
ls -l /data/var/lib/docker/volumes/test2/_data
docker stop mynginx6
docker rm mynginx6
docker ps | grep mynginx6
docker volume ls | grep test2 # 卷还在

image.png
image.png

docker run -d --name mynginx6_1 -v test2:/usr/share/nginx/html -p 8061:80 nginx:1.23.4
docker ps | grep mynginx6_
docker inspect mynginx6_1 | grep 'Mounts' -A 10
cd /data/var/lib/docker/volumes/test2/_data
vim index.html
curl 127.0.0.1:8061 # 一次绑定,同步修改

image.png
image.png

(2)绑定卷 bind mount
mkdir -p /data/lllzxx/testbind
cd /data/lllzxx/testbind
ls -l
docker run -d --name mynginx7 -v /data/lllzxx/testbind:/usr/share/nginx/html nginx:1.23.4
docker inspect mynginx7 | grep 'Mounts' -A 10
cd /data/lllzxx/testbind
ls -l
vi index.html
# 进入容器查看修改
docker exec -it mynginx7 bash
cd /usr/share/nginx/html
ls -l
cat index.htm;
exit

image.png
image.png
image.png

# 宿主机的目录不存在则会直接创建一个空的目录
docker run -d --name mynginx9 -v /data/lllzxx/testbindtest1:/usr/share/nginx/html nginx:1.23.4
docker inspect mynginx9 | grep 'Mounts' -A 10

image.png

docker run -d --name mynginx8 --mount type=bind,src=/data/lllzxx/testbind,dst=/usr/share/nginx/html nginx:1.23.4
docker ps | grep mynginx8
docker inspect mynginx8 | grep 'Mount' -A 10

docker exec -it mynginx8 bash
cd /usr/share/nginx/html
ls -l
echo "Hello bind by mount" > index2.html
exit
cat index2.html

image.png
image.png

(3)临时卷 tmpfs
docker run -d --name mynginx10 --tmpfs /test1 nginx:1.23.4
docker inspect mynginx10 | grep 'Mounts' -A 5 # 找不到 /test1
docker inspect mynginx10 | grep 'Tmpfs' -A 5
docker exec -it mynginx10 bash
ls -l
cd /test1
ls -l
echo "Helo tmpfs" > index.html
cat index.html
exit

docker restart mynginx10
docker exec -it mynginx10 bash
cd /test1
ls -l # 文件已经不存在了

image.png
image.png

docker run -d --name mynginx11 --mount type=tmpfs,dst=/test2 nginx:1.23.4
docker inspect mynginx11 | grep 'Mounts' -A 10

docker exec-it mynginx11 bash
ls -l
cd test2
ls -l
echo "Hello --mount tmpfs" > index.html
cat index.html
exit

docker restart mynginx11
docekr exec -it mynginx11 bash
cd test2
ls -l

image.png
image.png

cd /usr/share/nginx/html
ls -l
cat index.html # 查看宿主机目录下的内容

docker run -d --name mynginx12 --tmpfs  /usr/share/nginx/html -p 8012:80 nginx:1.23.4
docker inspect mynginx12 | grep 'Tmpfs' -A 10
docker exec -it mynginx12 bash
cd /usr/share/nginx/html
ls -l # 直接创建新的文件,容器文件覆盖宿主机文件
echo "Hello tmpfs" > index.html
exit
curl 127.0.0.1:8012 # 写入什么就打印什么

docker restart mynginx12
curl 127.0.0.1:8012 # 重启之后显示:403,没有访问权限

image.png
image.png

docker run -d --name mynginx13 --mount type=tmpfs,dst=/test3,tmpfs-size=1k nginx:1.23.4
docker inspect mynginx13 | grep 'Mounts' -A 5
ls -lh


docker cp Learning-Java mynginx13:/
docker exec -it mynginx13 bash
cd /test3 
cp /Learning-Java . # 空间限制,复制失败

cd /
touch tmplatedocumentbylzxx.txt
echo "Hello World!" > tmplatedocumentbylzxx.txt
find / -name tmplatedocumentbylzxx.txt
cat ... # 能够直接找到

docker exec -it mynginx13 bash
cd /test3 
touch tmplatedocumentbylzxx2.txt
echo "Hello World!" > tmplatedocumentbylzxx2.txt
find / -name tmplatedocumentbylzxx2.txt # 无法找到

image.png
image.png

3. 实战演习

docker run -d --name mysql1 -v /data/lllzxx docker run -d --name mysql1 -v /data/lllzxx/testmysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lzxx@mysql mysql:5.7
docker ps | grep mysql1
ls -l /data/lllzxx/testmysql

docker exec -it mysql1 bash
mysql -h 127.0.0.1 -u root -p
show databases;
create database test;
use test;
create table student(sno int, sname varchar(50));
insert into student values(1,'tony');
select * from student;
exit
exit

docker rm -f mysql1
docker ps | grep mysql1

docker run -d --name mysql1new -v /data/lllzxx/testmysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lzxx@mysql mysql:5.7
docker ps | grep mysql1new
docker exec -it mysql1new bash
mysql -h 127.0.0.1 -u root -p
use test;
select * from student; # 数据依旧存在
exit
exit

image.png
image.png
image.png

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

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

相关文章

美国教授查理曼说中国为何强大?中国人都不知道的民族特性

Title: 中国强大的秘密:查理曼教授的视角 在世界历史的长河中,中华民族以其辉煌灿烂的文化和举世瞩目的成就,书写了一篇篇传奇篇章。然而,对于中国人为什么能够取得如此卓越的成就,许多人却并不清楚。近日&#xff0c…

Linux搭建SFTP服务器

案例:搭建SFTP服务器 SFTP(SSH文件传输协议) SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的…

sqlserver保存微信Emoji表情

首先将数据库字段,设置类型为 nvarchar(200)一个emoji表情,占4字节就可以了,web前端展示不用改任何东西,直接提交数据保存;回显也会没有问题,C#代码不用做任何处理; 不哭不闹要睡觉&#x1f31…

若依框架使用mars3d的环境配置,地球构建

因项目需要,原本使用过的cesium依赖,现在想使用火星科技mars3d的一些功能,所以需要引入mars3d依赖,整个过程非常的坎坷,以至于我都不知道到底是哪些部分是标准的。。。先把我认为对的记录一下: 1.vue.conf…

【Java】SpringAOP —— AOP是什么? 代码实现了SpringAOP

文章目录 一、AOP是什么二、AOP的组成三、SpringAOP四、实现SpringAOP1.添加AOP框架支持2.定义切面切点3.定义相关通知 总结 一、AOP是什么 AOP(Aspect Oriented Programming):面向切面编程,它是⼀种思想,它是对某一类…

JVM 第四部分—垃圾回收相关概念 2

System.gc() 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存 然而System.gc()调用附带一个免责声明,无法保证对垃…

基于Camunda实现bpmn 2.0各种类型的任务

基于Camunda实现bpmn中各种类型任务 ​ Camunda Modeler -为流程设置器(建模工具),用来构建我们的流程模型。Camunda Modeler流程绘图工具,支持三种协议类型流程文件分别为:BPMN、DMN、Form。 ​ Camunda Modeler下载…

【Python】进阶学习:pandas--isin()用法详解

【Python】进阶学习:pandas–isin()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅…

【java】20:枚举

枚举的二种实现方式 1) 自定义类实现枚举 2) 使用 enum 关键字实现枚举 自定义实现枚举: 1.不需要提供setXxx方法,因为枚举对象值通常为只读. 2.对枚举对象/属性使用final static共同修饰,实现底层优化. 3.枚举对象名通常使用全部大写&…

电子电气架构——汽车以太网诊断路由汇总

电子电气架构——汽车以太网诊断路由汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将…

江科大stm32学习笔记——【4-1】OLED

一.原理 1.调试方式 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息。 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上。 Keil调试模式:借助Keil软件的调…

深入sizeof与strlen

一、sizeof与strlen的对比 sizeofstrlensizeof是单目操作符strlen是库函数,使用需要包含头文件string.hsizeof计算操作数所占用的内存,单位是字节strlen是求字符串长度,统计的是\0之前字符的个数不关注内存中存放什么数据 关注内存总是否有\0…

关于 HTTP 协议,你了解多少

HTTP协议 FastAPI 是建立在 HTTP 协议之上,所以为了更好的掌握 FastAPI。我们需要先简单的了解一下 HTTP协议 简介 HTTP(Hypertext Transfer Protocol)遵循经典的客户端-服务器模型,客户端打开连接以发出请求,然后等…

Linux内核队列queue.h

文章目录 一、简介二、SLIST单向无尾链表2.1 介绍2.2 操作2.3 例子 三、STAILQ单向有尾链表四、LIST双向无尾链表五、TAILQ双向有尾链表六、CIRCLEQ循环链表七、queue源码参考 一、简介 queue.h是一个非常经典的文件,定义了一系列宏的操作,它定义了一系…

复盘昨天的内容

vue调节css 后端做业务处理 1.分类管理 GetMapping("/queryCtc")public ApiResult queryCtc(){return ctcService.queryCtc();}/*** 修改类目信息* return*/PutMapping("/updateCtc")public ApiResult updateCtc(RequestBody ShopCtc shopCtc){return c…

element-plus 的el-img组件访问oss图片自动拼接前端地址

这是我的组件代码 <el-image style"width: 100px; height: 100px" :src"scope.row.logo" />访问时候 竟然凭借上了前端的地址端口 原来是我的oss服务是使用了域名做cdn加速的 内容分发网络&#xff08;CDN&#xff09;或者服务器配置&#xff0c;可…

2.1 mov、add和sub加减指令实操体验

汇编语言 1. mov操作 1.1 mov移动值 mov指令把右边的值移动到左边 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移动寄存器的值 把右边寄存器的值赋值给左边的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位&#xff08;high&#xff09;和低八位&am…

【leetcode】用栈实现队列

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: 在做此题之前&#xff0c;我们先要实现栈&#xff0c;这在上个博客中已经写过&#xf…

Topaz Gigapixel AI:让每一张照片都焕发新生mac/win版

Topaz Gigapixel AI 是一款革命性的图像增强软件&#xff0c;它利用先进的人工智能技术&#xff0c;能够显著提升图像的分辨率和质量。无论是摄影爱好者还是专业摄影师&#xff0c;这款软件都能帮助他们将模糊的、低分辨率的照片转化为清晰、细腻的高分辨率图像。 Topaz Gigap…

2024腾讯云优惠券领取和使用方法,北漂程序员整理

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…
最新文章