云时代【7】—— 存储卷

news2024/9/22 19:32:14

云时代【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.coloradmin.cn/o/1484161.html

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

相关文章

NFT Insider #121:苏富比去年 NFT 和数字艺术品销售额超过 3000 万美元,较 2022 年增长 50%

引言:NFT Insider由NFT收藏组织WHALE Members (https://twitter.com/WHALEMembers)、BeepCrypto (https://twitter.com/beep_crypto)联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜…

【CSS】CSS简介,CSS基础选择器详解

目录 css简介 css语法规范 css代码风格: css选择器的作用 css基础选择器 标签选择器 类选择器 类选择器---多类名 id选择器 id选择器和类选择器的区别: 通配符选择器 总结 ⭐css简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称,也…

机器学习-4

文章目录 前言数组创建切片索引索引遍历切片编程练习 总结 前言 本篇将介绍数据处理 Numpy 库的一些基本使用技巧,主要内容包括 Numpy 数组的创建、切片与索引、基本运算、堆叠等等。 数组创建 在 Python 中创建数组有许多的方法,这里我们使用 Numpy 中…

使用 Docker 部署 Answer 问答平台

1)介绍 GitHub:https://github.com/apache/incubator-answer Answer 问答社区是在线平台,让用户提出问题并获得回答。用户可以发布问题并得到其他用户的详细答案、建议或信息。回答可以投票或评分,有助于确定有用的内容。标签和分…

Redis 群集部署

1.关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型基础上,-般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。现实世界中…

软件分层(数据结构/软件逻辑上分层+举例),相连节点的概念+如何相连,为什么是层状结构(软件分层,网络协议分层+梳理协议顺序),协议分层(打电话例子)

目录 软件分层 介绍 举例 类的继承 虚拟文件系统 线程接口封装 虚拟地址空间 总结 为什么是层状的 软件分层 网络协议 原因 梳理协议顺序 相连节点 协议分层 引入 示例 实际上 逻辑上 制定出协议 软件分层 介绍 通过将软件系统划分为不同的层次,每一层都有…

OpenHarmony、HarmonyOS打开编辑 PDF 等操作的三方组件使用教程

项目场景: 随着数字化时代的发展,PDF 文档成为广泛应用于各行业的重要文件格式。为了提高OpenHarmony/HarmonyOS生态系统的功能性和用户体验,我们需要一款支持打开、编辑PDF文件的应用程序。 使用户能够轻松打开、浏览和编辑PDF文件。该应用将充分利用OpenHarmony/HarmonyO…

Day20-磁盘管理

Day20-磁盘管理 1. cut 切:2. 磁盘历史和内外部物理结构介绍2.1 磁盘发展趋势和实现措施2.2 磁盘知识的体系结构2.3 机械磁盘的外部结构2.4 SSD固态硬盘的外部结构2.5 固态硬盘内部结构2.6 缓存在服务器各硬件上的速度和大小对比另类维度图解,从上到下由高速到低速&…

机器学习:集成学习(Python)

一、Adaboost算法 1.1 Adaboost分类算法 adaboost_discrete_c.py import numpy as np import copy from ch4.decision_tree_C import DecisionTreeClassifierclass AdaBoostClassifier:"""adaboost分类算法:既可以做二分类、也可以做多分类&#…

数字化转型导师坚鹏:BLM证券公司数字化转型战略

BLM证券公司数字化转型战略 ——以BLM模型为核心,实现知行果合一 课程背景: 很多证券公司存在以下问题: 不知道如何系统地制定证券公司数字化转型战略? 不清楚其它证券公司数字化转型战略是如何制定的? 不知道…

Leetcode560. 和为 K 的子数组 -hot100

题目&#xff1a; 代码(首刷看解析 2024年3月2日&#xff09;&#xff1a; class Solution { public:int subarraySum(vector<int>& nums, int k) {// 前缀和 遍历int res 0;unordered_map<int, int> sumPre;int sum 0;// 关键&#xff1a;初始化sumPre[0]…

艺术家林曦:新的一年|开启人生的最佳竞技状态吧!

开年大吉呀&#xff5e;新的一年&#xff0c;你准备好如何启程了吗&#xff1f;    暄桐是一间传统美学教育教室&#xff0c;创办于2011年&#xff0c;艺术家林曦是创办人和授课老师&#xff0c;教授以书法为主的传统文化和技艺&#xff0c;皆在以书法为起点&#xff0c;亲…

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

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

通过修改host文件来访问GitHub

前言&#xff1a; 由于国内环境的原因&#xff0c;导致我们无法流畅的访问GitHub&#xff0c;。 但是我们可以采取修改host文件来实现流畅访问。 缺点&#xff1a;需要不定时的刷新修改。 操作流程 一、查询IP地址 以下地址可以查询ip地址 http://ip.tool.chinaz.com/ htt…

艾尔登法环备份存档方法

1.PC端使用WinR输入%AppData%\EldenRing 2.如图创建文件夹“我这取名叫备份存档”&#xff0c;将其中的三个文件复制到新建的文件夹中 3.理论上只需要备份替换ER0000.sl2文件即可

《Spring Security 简易速速上手小册》第9章 测试与维护 (2024 最新版)

文章目录 9.1 编写安全测试9.1.1 基础知识9.1.2 重点案例&#xff1a;保护 REST API9.1.3 拓展案例 1&#xff1a;自定义登录逻辑测试9.1.4 拓展案例 2&#xff1a;CSRF 保护测试 9.2 Spring Security 升级和维护9.2.1 基础知识9.2.2 重点案例&#xff1a;适配新的密码存储格式…

智能驾驶规划控制理论学习02-基于搜索的路径规划方法

目录 一、路径搜索问题 二、图论基础 三、图搜索方法 1、广度优先搜索&#xff08;BFS&#xff09; bfs与dfs的区别 bfs的搜索过程 bfs的算法实现 2、迪杰斯特拉算法&#xff08;Dijkstra&#xff09; 核心思想 优先级队列 Dijkstra搜索过程 Dijkstra优缺点…

计算机视觉基础知识(十六)--图像识别

图像识别 信息时代的一门重要技术;目的是让计算机代替人类处理大量的物理信息;随着计算机技术的发展,人类对图像识别技术的认识越来越深刻;图像识别技术利用计算机对图像进行处理\分析\理解,识别不同模式的目标和对象;过程分为信息的获取\预处理\特征抽取和选择\分类器设计\分…

Mybatis | 动态SQL

目录: 动态SQL中的 “元素” :\<if>元素\<choose>、\<when>、\<otherwise>元素\<where>、\<trim>元素\<set>元素\<foreach>元素\<bind>元素 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正…

【Python】进阶学习:pandas--如何根据指定条件筛选数据

【Python】进阶学习&#xff1a;pandas–如何根据指定条件筛选数据 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…