Ubantu docker学习笔记(六)容器数据卷

news2025/1/16 14:55:49

文章目录

  • 一、容器数据卷
  • 二、容器卷挂载
    • 2.1 在命令行挂载数据卷
    • 2.2 通过dockerfile挂载数据卷
  • 三、数据卷容器
  • 四、备份数据卷
  • 五、数据卷的恢复和迁移
    • 5.1 恢复数据卷
    • 5.2 迁移数据卷
  • 六、管理数据卷
    • 6.1 与容器关联
      • (1)例子一
      • (2)例子二
      • (3)例子三
    • 6.2 命令管理


一、容器数据卷

由于我们rootfs机制与我们的namespce,构建出来的文件分离系统,会导致我们产生数据文件,但是数据文件会随着我们容器的关闭而关闭,但是我们用户希望我们所产生的数据可以持久化,不同容器之间可以互通,也就是我们容器数据卷要解决的问题。
Docker绑定的就是Linux的绑定挂在机制,允许用户将一个目录或者文件挂载到一个文件系统中,原挂载点会被隐藏没有任何影响,从而实现共享。

(1)容器启动时初始化,如果容器使用的镜像包含数据卷,这些数据也会复制到数据卷中。
(2)容器对数据卷的修改是直接生效的。
(3)数据卷的变化不会影响镜像的更新。数据卷独立于联合文件系统,像基于联合文件系统,镜像与数据卷不会相互影响。
(4)数据卷是宿主机中的一个目录,与容器生命周期隔离。

二、容器卷挂载

2.1 在命令行挂载数据卷

使用-v加载一个数据卷

docker run -it --name volume -v /web/app centos
ls web/
exit

在这里插入图片描述
然后我们就可以通过如下命令看到挂载信息啦

docker inspect volume

在这里插入图片描述

我们再来看一个后台运行的列子

docker run -it -d --name test -v /webapp:/app nginx
docker inspect test 

在这里插入图片描述

下面,我们来进行一下测试吧
重启启动一个

docker run -it --name volume2 -v /webapp:/app centos
ls /

我们另外开一个控制台
在我们宿主机上进入webapp这个目录,然后新建两个文件

sudo su
cd /webapp
touch c.txt d.txt
ls

然后返回我们容器进行观察

ls /app

很明显进行了挂载
在这里插入图片描述
同理,我们如果在容器里面创建,我们本机也会进行更新,有点类似于我们的共享目录,这样在我们启动多台容器时,可以进行数据共享
在这里插入图片描述
此项操作,我们一般用于配置文件的共享,为了避免容器内部修改,我们会对文件进行权限设置
加入只读属性ro

docker run -it --name volume3 -v /webapp:/app:ro centos
ls /
cd app
echo hello world >a.txt

可以看到
在这里插入图片描述
同样对于创建文件也是同理,因为我们添加了只读属性

2.2 通过dockerfile挂载数据卷

dockerfile可以创建多个数据卷,但是不能映射到本地已经有的目录,在启动容器时,才会创建dockefile中指定的数据卷,然后以dockerfile中指定名称命名,所创建地址不一样,容器没有办法共享数据。

vim Dockerfile
#选择使用的image
FROM centos/vim
#执行的命令
VOLUME /root/data
VOLUME /work
VOLUME test
docker build -t volume .
ls

在这里插入图片描述
ctrl+p+q暂停退出

docker inspect 3dad75

现在就可以看到我们容器的挂载啦
在这里插入图片描述

三、数据卷容器

运行容器时宿主机会随机生成挂载目录,无法保持地址一致性,所以无法容器数据共享。数据卷,可以将已经命名的容器挂载数据卷,其他容器再通过挂载这个容器数据实现共享,挂载数据的容器的叫做容器数据卷。

docker run -it --name volume-container -v /volume1 -v /volume2 centos
ctrl+p+q暂停退出
docker inspect volume-container | grep volume

在这里插入图片描述
我们就可以看到我们所在的这个目录

cd /var/lib/docker/volumes/1f889275343587271abe22ec55878fefd25bec783e5c0ba30624fc4989893989/_data
echo hello world > a.txt
echo hello world2 > b.txt

然后我们再回到我们容器

docker attach b38d15

在这里插入图片描述
我们就可以在这里看到我们刚刚的容器目录啦
在这里插入图片描述
删除之后还是会继续保存

四、备份数据卷

人们通常会对数据进行一次或者多次备份,以确保数据的安全,下面我们来试一试吧

docker run -it --name volume-container -v /var/volume1 -v /var/volume2 centos

在其数据卷下创建文件并添加内容

echo hello world1 > /var/volume1/a.txt
echo hello world2 > /var/volume2/b.txt

我们备份的话,简单的来说,就是用–volumes-from参数来挂载数据卷,从宿主机挂载要放在备份数据的目录到容器的备份目录,然后用–rm删除容器

docker run --rm --volumes-from volume-container(你要备份的容器名)   -v /root/backup:/backup centos tar cvf /backup/backup1.tar /var/volume1

docker run --rm --volumes-from volume-container(你要备份的容器名)   -v /root/backup:/backup centos tar cvf /backup/backup2.tar /var/volume2

在这里插入图片描述

五、数据卷的恢复和迁移

5.1 恢复数据卷

由于我们之前已经对于数据卷做好了恢复,下面我们来对模拟的数据卷来进行恢复
进入数据卷

docker attach volume-container
rm -rf /var/volume1/a.txt
rm -rf /var/volume2/b.txt

然后我们用代码来恢复

docker run --rm --volumes-from volume-container -v /root/backup/:/backup centos tar xvf /backup/backup1.tar -C /

docker run --rm --volumes-from volume-container -v /root/backup/:/backup centos tar xvf /backup/backup2.tar -C /

在这里插入图片描述
完成!

5.2 迁移数据卷

我们新建一个数据卷容器

docker run -it --name new-container -v /volume1 -v /volume2 centos
ctrl+p+q
docker run --rm --volumes-from new-container -v /root/backup/:/backup centos tar xvf /backup/backup1.tar -C /volume1 
docker run --rm --volumes-from new-container -v /root/backup/:/backup centos tar xvf /backup/backup2.tar -C /volume2

在这里插入图片描述
在容器路劲和原来路劲相同时,可以直接导入,-C后面不用加参数,但是如果和源路劲不一样,我们需要在—C后面指定参数,不然会迁移失败

六、管理数据卷

6.1 与容器关联

命令含义
docker rm -v删除容器时添加-v会将数据卷一起删除
docker rm --rm运行结束时数据卷会和容器一起删除

(1)例子一

docker run -it -v /data --name test centos
docker inspect test | grep Source

在这里插入图片描述
进入到你那个目录

cd /var/lib/docker/volumes/22df6c5c6990231a9983cd9646a9115a3a5cd3bdd3260f187896205aa53036df/_data
docker rm test
docker inspect test | grep Source

可以看到数据卷还在
在这里插入图片描述

(2)例子二

docker run -it -v /data --name test2 centos
docker inspect test2 | grep Source
docker stop test2
docker rm -v test2

可以看到数据卷也随之删除
在这里插入图片描述

(3)例子三

docker run -it --rm -v /data --name test2 centos

退出容器时会自动删除容器和数据卷

6.2 命令管理

命令含义
creat创建容器卷 docker volume creat test
ls列出容器卷 docker volume ls
inspect显示一个或者多个数据卷的详细信息 docker inspect 容器名
rm删除一个或者多个容器
prune暂停容器 docker volume prune

Ubantu docker学习笔记(六)实验补充

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

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

相关文章

【LeetCode】剑指 Offer(28)

目录 题目:剑指 Offer 54. 二叉搜索树的第k大节点 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 55 - I. 二叉树的深度 - 力…

MySQL运维11-MySQL的事务隔离级别

文章目录1、MySQL的事务隔离级别2、MySQL事务隔离级别的相关参数和命令2.1、查看事务隔离级别2.2、设置事务隔离级别2.2.1、在会话中设置事务隔离级别2.2.2、在配置文件中设置事务隔离级别3、MySQL的多版本并发控制(MVCC)4、总结1、MySQL的事务隔离级别 事务隔离级别越高&…

Qt5.12实战之规则DLL导出函数使用

1.创建基于MFC的规则DLL工程: 输入工程名,然后点击创建 选择使用共享MFC DLL的常规DLL 创建成功后,解决方案下会多出一个工程 增加导出函数声明 实现导出函数 在模块定义文件def文件中声明导出

YC-B09(原创)基于springboot,vue网上书城

(原创)基于springboot,vue网上书城定制版v4.0 本人原创作品,用户前台、系统管理员后台项目完整,无任何bug。 每行代码都是本人自己写,我在代码上面都写有详细注释 开发工具:IDEA 服务器:Tomcat9.0, jdk…

代码随想录算法训练营第五十九天-单调栈2| 503.下一个更大元素II 42. 接雨水

503. Next Greater Element II 成环就用取模mod方法 import java.util.Arrays; import java.util.Stack;public class NextGreaterElement2 {public int[] nextGreaterElements(int[] nums) {//边界判断if(nums null || nums.length < 1){return new int[]{-1};}int size …

无需兔魔法!国内手机直接畅玩GPT!

为了用上ChatGPT很多同学都是经历一波三折&#xff0c;闯三关过五将&#xff01;因为使用ChatGPT的门槛很高&#xff0c;尤其是这个kx上网把很多人都挡在了门外&#xff01;有的同学说newbing呢&#xff0c;newbing如果你要用聊天功能&#xff0c;一样有这样门槛&#xff01;很…

Ubuntu docker 基本操作

安装docker&#xff1a; curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 也可以使用国内 daocloud 一键安装命令&#xff1a; curl -sSL https://get.daocloud.io/docker | sh 启动Docker命令&#xff1a; systemctl start docker 查看版本号&#xf…

NKCTF2023 babyrust

这道题目适合科普&#xff1a;rust逆向&#xff0c;xmm指令。 rust逆向的一些注意事项 rust题中&#xff0c;“ida给的main”里的第一个lea是“用户写的main”。 如下图&#xff0c;这是ida标记的main。而用户写的main其实是sub_1400012A0。姑且可以认为“ida给的main”里的…

初识springcloud

认识微服务 单体架构&#xff1a; 简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目&#xff0c;例如&#xff0c;学生管理系统。 分布式架构 松耦合&#xff0c;扩展性好&#xff0c;但架构复杂&#xff0c;难度大。适合大型互联网项目。如&#x…

【数据结构】解析队列各接口功能实现

目录 前言&#xff1a; 一、队列概述&#xff1a; 1.队列的概念&#xff1a; 二、队列的各种接口功能实现&#xff1a; 1.初始化队列&#xff1a; 2.入队&#xff08;尾插&#xff09;&#xff1a; 3.出队&#xff08;头删&#xff09;&#xff1a; 4.查看队头&#xf…

Zookeeper安装(Win和Linux)

Zookeeper安装 Zookeeper单机安装&#xff08;Windows&#xff09; 下载地址&#xff1a;Apache ZooKeeper 1.1 下载安装 下载好的文件进行解压缩得到apache-zookeeper-3.8.0-bin目录&#xff0c;创建zkdata及log目录&#xff0c;后续作为数据存放目录 1.2 配置启动 我们…

易点易动设备管理系统高效管理海量备品备件

纸质设备备品备件管理是企业运营中的重要环节&#xff0c;其管理效率和精度直接关系到企业的生产效率和经济效益。然而&#xff0c;传统的纸质管理方式存在诸多问题&#xff0c;如信息不透明、数据难以更新、易丢失等。为解决这些问题&#xff0c;易点易动设备管理系统应运而生…

webpack 之 Loader开发(一)

1. You may need an additional loader to handle the result of these loaders.&#xff08;我们可能还需要一个额外的加载器来处理当前加载器的结果&#xff09; 2. Loader可能经过一层层链路、又或者只有一层&#xff0c;最终的处理都是转化成 js&#xff0c;&#xff08;L…

【LeetCode: 139. 单词拆分 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

Ae:灯光选项

灯光选项 Light Options&#xff0c;用于调整光源的特性以及所产生的投影的相关设置。下面以属性最多的聚光灯的灯光选项为例进行说明。强度 Intensity光源的亮度。数值越大&#xff0c;光照越大。负值可产生吸光效果&#xff0c;即降低场景中其它光源的光照强度。颜色 Color默…

KNN、SVM、MLP、K-means分类实验

来源&#xff1a;投稿 作者&#xff1a;摩卡 编辑&#xff1a;学姐 数据集简介 实验使用了两个数据集&#xff0c;一个是经典的鸢尾花数据集(iris)另一个是树叶数据集(leaf) 鸢尾花数据集(iris)&#xff1a; 鸢尾花数据集发布于1988年7月1日&#xff0c;该数据集共有150条数…

客快物流大数据项目(一百一十二):初识Spring Cloud

文章目录 初识Spring Cloud 一、Spring Cloud简介 二、SpringCloud 基础架构图

使用cocopod就那么容易

第一节、配置coopod 打开终端替换ruby镜像源&#xff0c;系统自带的镜像源(gem sources --remove https://rubygems.org/)被墙挡住了或者&#xff08;https://ruby.taobao.org/&#xff09;已过期。需替换成新的镜像源。 1&#xff09;.先查看已有的镜像是否是&#xff1a;ht…

Spring Security --- 快速入门

概念 Spring Security是一个功能强大且高度可定制的&#xff0c;主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制它提供了全面的安全解决方案同时授权粒度可以在 Web请求级和方法…

GPT-4 介绍

1 简介 本文根据openAI的2023年3月的《GPT-4 Technical Report 》翻译总结的。 原文地址&#xff1a;https://arxiv.org/pdf/2303.08774.pdf 原文确实没有GPT-4 具体的模型结构&#xff0c;openAI向盈利组织、非公开方向发展了。也没透露硬件、训练成本、训练数据、训练方法等…