Docker容器数据卷
一、概念
1.定义
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
2.作用:
将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的。
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中则使用卷。
3.特点:
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接实时生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
二、添加容器卷
运行一个带有容器卷存储功能的容器实例:
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数
1.宿主vs容器之间映射添加容器卷
容器操作:
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker run -it --privileged=true -v /Users/hongcaixia/Documents/host_data:/tmp/docker_data --name=my_centos centos
[root@c61d4745b6e8 /]# cd /tmp/docker_data
[root@c61d4745b6e8 docker_data]# ls
[root@c61d4745b6e8 docker_data]# touch docker.txt
[root@c61d4745b6e8 docker_data]# ls
docker.txt
[root@c61d4745b6e8 docker_data]# ls -- 宿主机在该目录建立了host.txt
docker.txt host.txt
[root@c61d4745b6e8 docker_data]# echo 'write in docker'>docker.txt
[root@c61d4745b6e8 docker_data]# cat docker.txt
write in docker
[root@c61d4745b6e8 docker_data]# cat docker.txt -- 宿主机在该文件写入了write in host
write in docker
write in host
[root@c61d4745b6e8 docker_data]#
主机操作:
hongcaixia@hongcaixiadeMacBook-Pro ~ % cd /Users/hongcaixia/Documents/host_data
hongcaixia@hongcaixiadeMacBook-Pro host_data % ls
docker.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data % touch host.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data % ls
docker.txt host.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data % vi docker.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data % cat docker.txt
write in docker
write in host
hongcaixia@hongcaixiadeMacBook-Pro host_data %
使用docker inspect 容器id
命令查看容器挂载信息:
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1b08d9fd2a centos "/bin/bash" 14 minutes ago Up 14 minutes docker_centos
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker inspect dd1b08d9fd2a
[
..."Mounts": [{"Type": "bind","Source": "/Users/hongcaixia/Documents/host_data","Destination": "/tmp/docker_data","Mode": "","RW": true,"Propagation": "rprivate"}],
...
]
如果容器停止了,主机在挂载目录修改内容,当容器启动之后依旧可以同步到信息:
容器操作:
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1b08d9fd2a centos "/bin/bash" 22 minutes ago Up 22 minutes docker_centos
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker stop dd1b08d9fd2a
dd1b08d9fd2a
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker start dd1b08d9fd2a
dd1b08d9fd2a
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1b08d9fd2a centos "/bin/bash" 24 minutes ago Up 2 seconds docker_centos
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker exec -it dd1b08d9fd2a bash
[root@dd1b08d9fd2a /]# cd /tmp/docker_data/
[root@dd1b08d9fd2a docker_data]# ls
docker.txt docker_in.txt docker_in.txt~ docker_in.txz~ host.txt host1.txt
[root@dd1b08d9fd2a docker_data]#
主机操作:在容器停止之后创建host1.txt:
hongcaixia@hongcaixiadeMacBook-Pro host_data % touch host1.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data % ls
docker.txt docker_in.txt docker_in.txt~ docker_in.txz~ host.txt host1.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data %
2.添加读写映射规则
默认是可读可写
设置只读限制:容器实例内部被限制,只能读取不能写
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
容器操作:
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker run -it --privileged=true -v /Users/hongcaixia/Documents/host_data2:/tmp/docker_data2:ro --name=hcx_centos2 centos
[root@f12971f08fb1 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@f12971f08fb1 /]# cd /tmp/docker_data2/
[root@f12971f08fb1 docker_data2]# ls -- 在主机中创建的文件
host.txt
[root@f12971f08fb1 docker_data2]# touch docker.txt
touch: cannot touch 'docker.txt': Read-only file system
[root@f12971f08fb1 docker_data2]#
主机操作:
hongcaixia@hongcaixiadeMacBook-Pro Documents % cd host_data2
hongcaixia@hongcaixiadeMacBook-Pro host_data2 % ls
hongcaixia@hongcaixiadeMacBook-Pro host_data2 % touch host.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data2 % ls
host.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data2 %
三、卷的继承和共享
docker run -it --privileged=true --volumes-from 父类 --name 容器名 镜像名
第一个容器my_centos3:
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker run -it --privileged=true -v /Users/hongcaixia/Documents/host_data3:/tmp/docker_data3 --name=my_centos3 centos
[root@1e7c088b1b4d /]# cd /tmp/docker_data3
[root@1e7c088b1b4d docker_data3]# ls
[root@1e7c088b1b4d docker_data3]# touch docker3.txt
[root@1e7c088b1b4d docker_data3]# ls
docker3.txt
[root@1e7c088b1b4d docker_data3]# ls
docker3.txt docker4.txt
[root@1e7c088b1b4d docker_data3]# ls
docker3.txt docker4.txt host.txt
[root@1e7c088b1b4d docker_data3]#-- 停掉父容器,不影响子容器和主机的同步
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
671ef51c2961 centos "/bin/bash" 6 minutes ago Up 6 minutes my_centos4
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker stop 671ef51c2961
671ef51c2961
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
hongcaixia@hongcaixiadeMacBook-Pro ~ % -- 父容器恢复,主机和子容器的操作可以同步过来
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker start 671ef51c2961
671ef51c2961
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker exec -it 671ef51c2961 /bin/bash
[root@671ef51c2961 /]# cd /tmp/docker_data3/
[root@671ef51c2961 docker_data3]# ls
docker3.txt docker4.txt host.txt host2.txt
[root@671ef51c2961 docker_data3]#
第二个容器my_centos4: 继承3的容器卷
hongcaixia@hongcaixiadeMacBook-Pro ~ % docker run -it --privileged=true --volumes-from my_centos3 --name=my_centos4 centos
[root@671ef51c2961 /]# cd /tmp/docker_data3
[root@671ef51c2961 docker_data3]# ls
docker3.txt
[root@671ef51c2961 docker_data3]# touch docker4.txt
[root@671ef51c2961 docker_data3]# ls
docker3.txt docker4.txt host.txt
[root@671ef51c2961 docker_data3]# -- 停掉父容器,不影响子容器和主机的同步
[root@671ef51c2961 docker_data3]# ls
docker3.txt docker4.txt host.txt host2.txt
[root@671ef51c2961 docker_data3]#
主机:
hongcaixia@hongcaixiadeMacBook-Pro Documents % cd host_data3
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % ls
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % ls
docker3.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % ls
docker3.txt docker4.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % touch host.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % ls
docker3.txt docker4.txt host.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % hongcaixia@hongcaixiadeMacBook-Pro host_data3 % touch host2.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data3 % ls
docker3.txt docker4.txt host.txt host2.txt
hongcaixia@hongcaixiadeMacBook-Pro host_data3 %
父容器stop,不会影响子容器和主机之间的同步
相关文章:
Docker容器数据卷
一、概念 1.定义 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。 卷的设计目的就是数据的持久化,完全独…...

chatGPT 国内版,嵌入midjourney AI创作工具
聊天GPT国内入口,免切网直达,可直接多语言对话,操作简单,无需复杂注册,智能高效,即刻使用.可以用作个人助理,学习助理,智能创作、新媒体文案创作、智能创作等各种应用场景! 地址: https://ai.wboat.cn/...

Yum仓库架构解析与搭建实践
1.Yum仓库搭建 1.1本地Yum仓库图解 1.2Linux本地仓库搭建 配置本地光盘镜像仓库 1)挂载 [roothadoop101 ~]# mount -t iso996 /dev/cdrom/mnt 2)查看 [rooothadoop101 ~] # df -h | |grep -i mnt /dev/sr0 4.6G 4.4G 3…...

ElementPlus中的分页逻辑与实现
ElementPlus中的分页逻辑与实现 分页是web开发中必不可少的组件,element团队提供了简洁美观的分页组件,配合table数据可以实现即插即用的分页效果。分页的实现可以分成两种,一是前端分页,二是后端分页。这两种分页分别适用于不同…...

实验01:静态路由配置实验
1.实验目的: 本次实验的主要目的是了解静态路由的配置和实现原理,熟悉路由器的基本操作,掌握在网络中进行静态路由配置的方法和技巧。 2.实验内容: 搭建网络拓扑,包括三台路由器和两台PC。配置路由器的IP地址和路由…...

C#中简单的继承和多态
今天我们来聊一聊继承,说实话今天也是我第一次接触。 继承的概念是什么呢?就是一个类可以继承另一个类的属性和方法(成员) 继承是面向对象编程中的一个非常重要的特性。 好了,废话不多说,下面切入正题&a…...

15、lambda表达式、右值引用、移动语义
前言 返回值后置 auto 函数名 (形参表) ->decltype(表达式) lambda表达式 lambda表达式的名称是一个表达式 (外观类似函数),但本质绝非如此 语法规则 [捕获表] (参数表) 选项 -> 返回类型 { 函数体; }lambda表达式的本质 lambda表达式本质其实是一个类…...

spring boot 实现直播聊天室(二)
spring boot 实现直播聊天室(二) 技术方案: spring bootnettyrabbitmq 目录结构 引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.96.Final</version> </dependency>Si…...
alibaba fastjson GET List传参 和 接收解析
之前一直都是 get传的都是单字符串(例如 xxxxxxxxx?name{name};name“woaini”;),并没有传list的. GET List传参 问题场景 String url"xxxxxxxx?id{id}"; HashMap<String,Object> param new HashMap<>(); param.pu…...

API自动化测试是什么?我们该如何做API自动化测试呢?
API测试已经成为测试工作中的常规任务之一。为了提高测试效率并减少重复的手工操作,API自动化测试变得越来越重要。本文总结了API自动化测试方面的经验和心得,旨在与读者分享。 掌握自动化技能已经成为高级测试工程师的必备技能。敏捷和持续测试改变了传…...

PyTorch 的 10 条内部用法
欢迎阅读这份有关 PyTorch 原理的简明指南[1]。无论您是初学者还是有一定经验,了解这些原则都可以让您的旅程更加顺利。让我们开始吧! 1. 张量:构建模块 PyTorch 中的张量是多维数组。它们与 NumPy 的 ndarray 类似,但可以在 GPU …...

Django、Echarts异步请求、动态更新
前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>echarts示例</title> <script src"jquery.min.js"></script><script type "text/javascript" src "echarts.m…...

Mac部署Odoo环境-Odoo本地环境部署
Odoo本地环境部署 安装Python安装Homebrew安装依赖brew install libxmlsec1 Python运行环境Pycharm示例配置 Mac部署Odoo环境-Odoo本地环境部署 安装Python 新机,若系统没有预装Python,则安装需要版本的Python 点击查询Python官网下载 安装Homebrew 一…...
【✅面试编程题:如何用队列实现一个栈】
✅面试编程题:如何用队列实现一个栈 💡典型回答 💡典型回答 使用两个队列可以实现一个栈,一个队列用来存储栈中的元素,另一个队列用来在pop操作时暂存元素。 上才艺: import java.util.LinkedList; impo…...

Windows本地的RabbitMQ服务怎么在Docker for Windows的容器中使用
1. 进入管理界面 windows安装过程请访问:Windows安装RabbitMQ、添加PHP的AMQP扩展 浏览器访问:http://127.0.0.1:15672/ 2. 创建虚拟主机 上面访问的是 RabbitMQ 的管理界面,可以在这个界面上进行一些操作,比如创建虚拟主机、…...

YOLOv5改进 | 2023卷积篇 | AKConv轻量级架构下的高效检测(既轻量又提点)
一、本文介绍 本文给大家带来的改进内容是AKConv是一种创新的变核卷积,它旨在解决标准卷积操作中的固有缺陷(采样形状是固定的),AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状,能够使用任意数量…...

微信小程序:模态框(弹窗)的实现
效果 wxml <!--新增(点击按钮)--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…...

uniapp交互反馈api的使用示例
官方文档链接:uni.showToast(OBJECT) | uni-app官网 1.uni.showToast({}) 显示消息提示框。 常用属性: title:页面提示的内容 image:改变提示框默认的icon图标 duration:提示框在页面显示多少秒才让它消失 添加了image属性后。 注…...

XUbuntu22.04之HDMI显示器设置竖屏(一百九十八)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

如何用 Cargo 管理 Rust 工程系列 甲
以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/ceMTUzRjDoiLwjn_KfZSrg 这几年 Rust 可谓是炙手可热的新兴编程语言了,而且被投票为最受程序员喜爱的语言。它很现代,专门…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...

Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...