【云原生】Docker的数据管理(数据卷、容器互联)

news2024/9/27 19:18:13

目录

一、数据卷(容器与宿主机之间数据共享)

二、数据卷容器(容器与容器之间数据共享)

三、 容器互联(使用centos镜像)

总结


用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。

容器中管理数据主要有两种方式:

  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volume Dontainers)

一、数据卷(容器与宿主机之间数据共享)

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

想要将容器中的数据持久化,可以将宿主机目录挂载到容器中。

一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。

docker run -v 数据卷              #在容器内创建数据卷
 ​
 docker run -v 宿主机目录:数据卷    #将宿主机目录挂载到容器中
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #挂载后的目录默认可读可写
 
 #如果希望挂载后的目录为只读目录,可以在挂载时加:ro参数
 docker run -v 宿主机目录:数据卷:ro    #将宿主机目录挂载到容器中,只可读

示例:

[root@yuji ~]# ls /var/share      #创建数据卷前,该目录不存在
 ls: 无法访问/var/share: 没有那个文件或目录
 ​
 #将宿主机目录/var/share挂载到容器中的/data1。
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #-v选项可以在容器内创建数据卷
 [root@yuji ~]# docker run -v /var/share:/data1 --name web1 -itd centos:7 /bin/bash
 670bf71814364638c4b21a1fb13bcf95c6a2125cd379a5717061d41f9673b0fe
 [root@yuji ~]# ls /var/share -d     #自动创建了该目录
 /var/share
 #进入容器
 [root@yuji ~]# docker exec -it web1 bash 
 [root@670bf7181436 /]# ls            #容器中自动创建了/data1目录
 anaconda-post.log  data1  etc   lib    media  opt   root  sbin  sys  usr
 bin                dev    home  lib64  mnt    proc  run   srv   tmp  var
 [root@670bf7181436 /]# echo "this is web1"> /data1/abc.txt   #向数据卷中写入数据
 [root@670bf7181436 /]# exit    #退出容器
 exit
 #返回宿主机进行查看
 [root@yuji ~]# cd /var/share
 [root@yuji share]# ls
 abc.txt
 [root@yuji share]# cat abc.txt      #可以看到容器中写入的数据,数据同步成功
 this is web1
 ​
 ​
 #在宿主机目录中写入数据,之后进容器中查看
 [root@yuji share]# cp /etc/passwd ./
 [root@yuji share]# ls
 abc.txt  passwd
 [root@yuji share]# docker exec -it web1 bash      #进入容器
 [root@670bf7181436 /]# ls /data1   
 abc.txt  passwd                     #完成了数据同步

1-1.png

1-2.png

二、数据卷容器(容器与容器之间数据共享)

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

#创建数据卷容器web2。创建/data1和/data2两个数据卷。
 docker run --name web2 -v /data1 -v /data2 -itd centos:7
 docker exec -it web2 bash                #进入web2容器
 echo "this is web2" > /data1/aaa.txt     #向数据卷/data1中写入数据
 echo "this is yuji" > /data2/bbb.txt     #向数据卷/data2中写入数据
 ​
 #使用--volumes-from 来挂载web2容器中的数据卷到新的容器web3
 docker run -itd --volumes-from web2 --name web3 centos:7
 docker exec -it web3 bash       #进入web3容器
 cat /data1/aaa.txt              #查看/data1中的数据是否和web2一致
 cat /data2/bbb.txt              #查看/data2中的数据是否和web2一致

2-1.png

2-2.png

#在容器web3的挂载目录中写入数据,观察web2中能否同步成功
 [root@e99ee4f80519 /]# echo "this is web3" > /data1/web3.txt
 [root@e99ee4f80519 /]# exit
 exit
 [root@yuji ~]# docker exec -it web2 bash     #进入容器web2
 [root@146f1012bc08 /]# cat /data1/web3.txt   #数据共享成功
 this is web3

2-3.png

三、 容器互联(使用centos镜像)

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息。

示例1:做容器互联

#创建并运行源容器取名c1
 docker run -itd -P --name c1 centos:7 /bin/bash
 #创建并运行接收容器取名c2,使用--1ink选项指定连接容器c1以实现容器互联。
 docker run -itd -P --name c2 --link c1:C1 centos:7 /bin/bash
 ##--link 容器名:连接的别名
 ​
 #进c2容器,ping c1,通过容器名称或者别名都可以通信
 docker exec -it c2 bash
 ping c1        #ping c1容器名称
 ping C1        #ping c1容器的别名
 PING C1 (172.17.0.5) 56(84) bytes of data.
 64 bytes from C1 (172.17.0.5): icmp_seq=1 ttl=64 time=0.105 ms
 64 bytes from C1 (172.17.0.5): icmp_seq=2 ttl=64 time=0.066 ms
 #可以看到c1容器的IP地址为172.17.0.5
 ​
 #进入c1容器,查看c1的IP地址
 docker exec -it c1 bash
 yum install -y net-tools   #下载网络工具
 ifconfig                   #查看IP为172.17.0.5,和c2中显示的一致
 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 172.17.0.5  netmask 255.255.0.0  broadcast 172.17.255.255

3-1.png

3-2.png

3-3.png

示例2:如果不做互联的话只能通过IP进行通信

#创建容器c5,没有与c1做互联
 docker run -itd -P --name c5 centos:7 /bin/bash
 docker exec -it c5 bash      #进入容器c5
 #通过c1的容器名称和别名,都无法和c1通信
 ping c1        #提示:ping: c1: Name or service not known
 ping C1        #提示:ping: C1: Name or service not known
 #只能通过IP进行通信
 ping 172.17.0.5

3-4.png

总结

本文介绍了通过数据卷和数据卷容器对容器内数据进行共享、备份和恢复等操作,通过这些机制,即使容器在运行中出现故障,用户也不必担心数据发生丢失,只需要快速地重新创建容器即可。

命令说明
docker run -v 宿主机目录:数据卷将宿主机目录挂载到容器中
docker run -v 数据卷创建数据卷容器
docker run --volumes-from 数据卷容器挂载数据卷容器(挂载点路径不变)
docker run --link 源容器名称:别名容器互联

注意:一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。

因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。

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

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

相关文章

Spring(aop介绍,底层实现,jdk代理,cglib代理)

02-aop简介-aop的作用及其优势_哔哩哔哩_bilibili 122 1、Spring的aop介绍 1.1aop是一种技术&#xff0c;aop是在运行之间执行的&#xff0c;他可以完成程序功能之间的松耦合&#xff0c;动态代理的作用也等同于Aop的作用&#xff1a;他提供了相应的封装&#xff0c;Aop是面向…

UG\NX二次开发 使用BlockUI设计对话框时,如何设置默认的开发语言?

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,C\C++,Qt-CSDN博客 简介: NX二次开发使用BlockUI设计对话框时,如何设置默认的代码语言? 效果: 方法: 依次打开“文件”->“实用工具”->“用户默认设置”->“用户界面”->“操作记录”->“…

如何进行微服务的集成测试

集成测试的概念 说到集成测试&#xff0c;相信每个测试工程师并不陌生&#xff0c;它不是一个崭新的概念&#xff0c;通过维基百科定义可以知道它在传统软件测试中的含义。 Integration testing (sometimes called integration and testing, abbreviated I&T) is the pha…

【C++精华铺】9.STL string

目录 1. string类的优势 2. string类的常用接口 2.1 常用构造 1. 空串构造&#xff1a;string(); 2. C串构造&#xff1a;string(const char* s); 3. 拷贝构造&#xff1a;string(const string& str); 4. 字符填充构造&#xff1a;string(size_t n, char c); 5. 迭代…

GDFN模块(restormer)

为了对特征进行变换&#xff0c;常规的前馈神经网络独立地在每个像素位置进行相同的操作。它使用两个1x1卷积层&#xff0c;一个用来扩展特征通道&#xff08;通常4倍&#xff09;&#xff0c;第二个用来将特征通道减少到原来的输入维度。在隐藏层中加入非线性。 GDFN做了两个…

嵌入式实时操作系统的设计与开发

时钟管理 在RTOS中&#xff0c;时钟具有非常重要的作用&#xff0c;通过时钟可实现延时任务、周期性触发任务执行、任务有限等待的计时。 大多数嵌入式系统有两种时钟源&#xff0c;分别为实时时钟RTC&#xff08;Real-Time Clock&#xff09;和定时器/计数器。 实时时钟一般…

jvm——内存模型

1.java内存模型 1.1 原子性 1.2 问题分析 这里与局部变量自增不同&#xff0c;局部变量调用iinc是在局部变量表槽位上进行自增。 静态变量是在操作数栈自增。 这里的主内存和工作内存时再JMM里的说法。 因为操作系统是时间片切换的多个线程轮流使用CPU. 1.3解决方法 JMM中…

2023京东酒类市场数据分析(京东数据开放平台)

根据鲸参谋平台的数据统计&#xff0c;今年7月份京东平台酒类环比集体下滑&#xff0c;接下来我们一起来看白酒、啤酒、葡萄酒的详情数据。 首先来看白酒市场。 鲸参谋数据显示&#xff0c;7月份京东平台白酒的销量为210万&#xff0c;环比下滑约49%&#xff1b;销售额将近19…

前端需要理解的数据结构与算法知识

1 数组 1.1 集合、列表、数组的联系与区别 集合&#xff1a;由一个或多个确定的元素所构成的整体。类型不一定相同、确定、无序、互异。 列表&#xff08;又称线性列表&#xff09;&#xff1a;按照一定的线性顺序&#xff0c;排列而成的数据项的集合。类型不一定相同、有序…

opencv实现全景图像拼接

目录 部分代码展示&#xff1a; 效果演示 查看处理过程 历史记录 完整演示视频&#xff1a; 完整代码链接 部分代码展示&#xff1a; 效果演示 查看处理过程 历史记录 完整演示视频&#xff1a; 无法粘贴视频........ 完整代码链接 视频和代码都已上传百度网盘&#x…

Kafka 简介 + 学习笔记

消息队列 先说明消息队列是什么&#xff1a; 亚马逊&#xff1a; 消息队列是一种异步的服务间通信方式&#xff0c;适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高…

机器学习基础之《分类算法(5)—朴素贝叶斯算法原理》

一、朴素贝叶斯算法 1、什么是朴素贝叶斯分类方法 之前用KNN算法&#xff0c;分类完直接有个结果&#xff0c;但是朴素贝叶斯分完之后会出现一些概率值&#xff0c;比如&#xff1a; 这六个类别&#xff0c;它都有一定的可能性 再比如&#xff0c;对文章进行分类&#xff1a;…

element Collapse 折叠面板 绑定事件

1. 点击面板触发事件 change <el-collapse accordion v-model"activeNames" change"handleChange"><el-collapse-item title"一致性 Consistency"><div>与现实生活一致&#xff1a;与现实生活的流程、逻辑保持一致&#xff0c…

【附安装包】Fireworks 8安装教程

软件下载 软件&#xff1a;Fireworks版本&#xff1a;8语言&#xff1a;简体中文大小&#xff1a;88.3M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/s…

NetMarvel机器学习促广告收益最大化,加速获客

游戏出海的竞争日益激烈&#xff0c;这并非空穴来风。 从2021年第一季度至2022年第四季度&#xff0c;iOS平台的CPI增长了88%&#xff0c;意味着厂商需要花费近两倍的钱才能获取一个新用户。与此同时数据隐私政策持续收紧&#xff0c;更加提高了营销成本。 在成本高涨的当下&…

Java 中的集合类有哪些?如何分类的?

面试回答 Java 的整个集合框架中&#xff0c;主要分为 List、Set、Queue、Stack、Map 等五种数据结构。其中&#xff0c;前四种数据结构都是单一元素的集合&#xff0c;而最后的 Map 则是以 KV 对的形式使用。 从继承关系上讲&#xff0c;List、Set、Queue都是 Collection 的子…

uniapp 微信小程序:RecorderManager 录音DEMO

uniapp 微信小程序&#xff1a;RecorderManager 录音DEMO 简介index.vue参考资料 简介 使用 RecorderManager 实现录音。及相关的基本操作。&#xff08;获取文件信息&#xff0c;上传文件&#xff09; 此图包含Demo中用于上传测试的服务端程序upload.exe&#xff0c;下载后用…

基于Java+SpringBoot+vue前后端分离体育馆使用预约平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Tensor-动手学深度学习-李沐_笔记

介绍 Tensor&#xff0c;又称"张量"&#xff0c;其实就是n维度数组。不同维度的Tensor示意图如下&#xff1a; 关于Tensor.reshape reshape函数可以处理总元素个数相同的任何新形状&#xff0c;【3&#xff0c;2&#xff0c;5】->【3&#xff0c;10】->【5&a…

论文笔记: One Fits All:Power General Time Series Analysis by Pretrained LM

1 intro 时间序列领域预训练模型/foundation 模型的研究还不是很多 主要挑战是缺乏大量的数据来训练用于时间序列分析的基础模型——>论文利用预训练的语言模型进行通用的时间序列分析 为各种时间序列任务提供了一个统一的框架 论文还调查了为什么从语言领域预训练的Transf…